为什么我们不能使用Java中的私有构造函数继承类?谁能用简单的例子解释一下?
答案 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); }
}