我们可以重写java中的构造函数吗?构造函数可以是私有的吗?

vktxenjb  于 2021-07-03  发布在  Java
关注(0)|答案(11)|浏览(298)

请解释一下这些问题:
我们可以吗 Override java中的构造函数?
可以吗 Constructor 保密?

agxfikkp

agxfikkp1#

在派生类中,可以创建具有相同签名的新构造函数,但这并不是真正的重写,因为在初始化该类时,父类的构造函数仍在新构造函数之前被调用。
类的构造函数可以是私有的,也可以是受保护的,当然也可以是公共的。但是,如果它是受保护的或私有的,您将如何初始化该类实际上你可以在那个类中使用一个静态函数……)

j2datikz

j2datikz2#

试试这个:http://www.javabeginner.com/learn-java/java-constructors 1->否2->是

wooyq4lh

wooyq4lh3#

不,我们不能重写构造函数,为了实现单例模式,我们应该有一个私有构造函数。

jgovgodb

jgovgodb4#

不,我们不能在类外使用构造函数,因为子类将构造函数视为方法。。没有返回类型。
您可以将其用作私有对象,但如果类的构造函数是私有的,则不能将受尊重类的obj转换为另一个类。

7tofc5zh

7tofc5zh5#

1) 不!构造函数属于声明它的类。子类是另一个类,必须有自己的构造函数。因此,构造函数不能被重写。
2) 是的,在单身的情况下通常是这样的。

ukxgm1gy

ukxgm1gy6#

1) 这仅仅是家庭作业问题,还是你在试着做些什么?你能用一个重写构造函数展示你想要达到的目标吗?
由于首先调用父构造函数,因此可以在构造函数中根据需要修改基类。当然,只要对基本属性的访问不是私有的。如果您扩展了一个类,但不喜欢它们的私有属性,则从中派生是一个错误。
2) 构造函数可以是私有的吗?
是的,但是你知道它有什么用吗?

46qrfjad

46qrfjad7#

不能重写构造函数,但是可以将其设置为任何访问级别修饰符,如public、private或default。你可能需要一个私有的构造函数,比如一个单例或者一个主要由静态方法构成的类(比如java的数学类)

jei2mxaa

jei2mxaa8#

您可以使用回调:
在父类中:

protected void onCreate(){}

SomeClass(){
//Constructor code
onCreate()
}

儿童:

@Override
protected void onCreate(){
//Child constructor code
}
uxhixvfz

uxhixvfz9#

这两个都不是真的,因为当一个类继承另一个类时,它会自动调用其父类,所以我们不能重写它们并使它们成为final。

ui7jx7zq

ui7jx7zq10#

构造函数是用于类的。它在任何情况下都不能被推翻。就像是想把法拉利的工厂从宝马的工厂改过来(这是不现实的)。当然,您可以重载以获得所需的功能。
是的,构造函数可以是私有的。通过将其私有化,您不会让外部世界直接通过构造函数创建它的对象,但是singleton模式使用公共静态方法来调用类的构造函数,并且可以创建对象。

dhxwm5r4

dhxwm5r411#

不,不能重写构造函数。它们不是遗传的。但是,每个子类构造函数必须链接到子类中的另一个构造函数或超类中的一个构造函数。例如:

public class Superclass
{
    public Superclass(int x) {}

    public Superclass(String y) {}
}

public class Subclass extends Superclass
{
    public Subclass()
    {
        super(5); // chain to Superclass(int) constructor
    }
}

构造函数未被继承的含义是您不能这样做:

// Invalid
Subclass x = new Subclass("hello");

至于第二个问题,是的,构造函数可以是私有的。它仍然可以在类或任何封闭类中调用。这对于单件物品很常见:

public class Singleton
{
    private static final Singleton instance = new Singleton();

    private Singleton()
    {
        // Prevent instantiation from the outside world (assuming this isn't
        // a nested class)
    }

    public static Singleton getInstance() {
        return instance;
    }
}

如果您有一个只包含静态方法的实用程序类,私有构造函数也可以用来防止任何示例化。

相关问题