为什么我们不能使用Java中的私有构造函数继承类?

时间:2019-01-08 19:25:28

标签: java inheritance constructor private

为什么我们不能使用Java中的私有构造函数继承类?谁能用简单的例子解释一下?

2 个答案:

答案 0 :(得分:0)

一个类中的任何private事物都只能在该类中只能访问。对于任何其他类,甚至是子类,就像私有的东西不存在一样。

因此,当您的 base 类只有私有构造函数时,子类根本无法对超级构造函数进行任何类型的调用。因为没有这样的构造函数对子类可见。

赞:

class Base {
  private Base() { }
  static Base newInstance() { return new Base(); }
}

class Child扩展了Base {    ...

没有有效的方法编写给Child构造函数的信息。因为任何构造函数都必须调用超级构造函数。当然,如果 Base具有非私有构造函数,则派生类具有可以调用的super()

答案 1 :(得分:0)

如果仅具有 私有构造函数,则不能从子类中调用它们。子类是调用父类的构造函数之一所必需的,但这不是必需的,因为它们不可见。即使您未显式调用父类构造函数,也仍然隐式调用super(),如果默认构造函数为private,则该调用将失败。

class Parent {
    private Parent() { }
    private Parent(int param) { }
}

class Child extends Parent {
    // Invalid: Implied call to super(), which is private.
    Child() { }

    // Invalid: Cannot call super(int) since it's private.
    Child() { super(42); }
}