我们可以用Java覆盖构造函数,构造函数可以是私有的吗?

时间:2011-03-25 09:23:03

标签: java

我很感激对这些问题的解释:

  1. 我们可以Override使用Java构造函数吗?
  2. Constructor可以私有吗?

11 个答案:

答案 0 :(得分:26)

不,你不能覆盖构造函数。他们不是遗传的。但是,每个子类构造函数必须将 链接到子类中的另一个构造函数到超类中的构造函数。例如:

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;
    }
}

私有构造函数也用于阻止任何实例化,如果你有一个只有静态方法的实用程序类。

答案 1 :(得分:4)

构造函数用于类。在任何情况下都无法覆盖它。它想要从宝马的工厂改变法拉利的工厂(这是不实际的)。 当然,您可以超载以获得所需的功能。

是构造函数可以是私有的。通过将其设为私有,您不会让外界通过构造函数直接创建它的对象,但是单例模式使用公共静态方法来调用类的构造函数,并且可以创建对象。

答案 2 :(得分:3)

  1. 不,我们不能在类外使用构造函数,因为子类将构造函数视为一个方法..没有返回类型。
  2. 您可以将它用作私有,但如果类的构造函数是私有的,那么您就不能将受尊重的类的obj变为另一个类。

答案 3 :(得分:2)

1)不!构造函数属于到声明它的类。子类是一个不同的类,必须有自己的构造函数。因此,构造函数根本无法被覆盖。

2)是的,这通常是在单身人士的情况下完成的。

答案 4 :(得分:2)

您可以使用回调:

在父类中:

protected void onCreate(){}

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

在孩子身上:

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

答案 5 :(得分:1)

不,我们不能覆盖构造函数,为了实现Singleton模式,我们应该有一个私有的construtor。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

1)这只是功课问题,还是你试图达成某些目标?你能用最重要的构造函数展示你试图达到的目标吗?

由于首先调用父构造函数,因此您可以在构造函数中根据需要修改基类。当然,只要对基本属性的访问不是私有的。如果扩展一个类但不喜欢它们的may-be-private属性,那么从它派生是一个错误。

2)构造函数可以是私有的吗?

是的,但你知道它有什么好处吗?

答案 8 :(得分:1)

  1. 在派生类中,您可以创建一个具有相同签名的新构造函数,但这并不是真正重写,因为在初始化类时,父类的构造函数仍会在新类之前调用​​。

    < / LI>
  2. 一个类的构造函数可以是私有的或受保护的,当然也可以是公共的。但如果它受到保护或私密,您会如何开始上课? (实际上你可以在该类中使用静态函数...)

答案 9 :(得分:0)

两者都不是真的,因为当一个类继承其他类时,它会自动调用它的父类,所以我们不能覆盖并使它们成为最终的。

答案 10 :(得分:0)

您不能覆盖构造函数,但是您可以为它们设置任何访问级别修饰符,例如public,private或default。您可能需要私有构造函数来处理单例或类似于主要由静态方法构成的类(即Java的数学类)