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

S.G*_*esh 7 java

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

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

Jon*_*eet 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

// Invalid
Subclass x = new Subclass("hello");
Run Code Online (Sandbox Code Playgroud)

至于你的第二个问题,是的,构造函数可以是私有的.它仍然可以在类或任何封闭类中调用.这对于单身人士来说很常见:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • @Scott:如果您不提供私有构造函数,编译器将为您创建一个无参数构造函数,其他人可以调用它.这不仅仅是关于阻止*派生* - 它是关于阻止*实例化*. (3认同)
  • @Ganesh,实际上是另一种方式:编译器自动为没有构造函数的任何类提供无参数的默认构造函数.参考:http://download.oracle.com/javase/tutorial/java/javaOO/constructors.html (2认同)