【发布时间】:2019-01-08 19:25:28
【问题描述】:
为什么我们不能用 Java 中的私有构造函数继承一个类?谁能用简单的例子解释一下?
【问题讨论】:
-
您可以使用私有 ctor 扩展一个类:它只需要在同一个编译单元中定义。 ideone.com/UXCpXr
-
仅作记录:请不要忘记在某个时候接受答案。
标签: java inheritance constructor private
为什么我们不能用 Java 中的私有构造函数继承一个类?谁能用简单的例子解释一下?
【问题讨论】:
标签: java inheritance constructor private
类中的任何private 事物只能从该类中访问。对于任何其他类,甚至是子类来说,就好像那个私有的东西不存在一样。
因此,当您的 基类 类仅 有一个私有构造函数时,子类根本无法对超级构造函数进行任何类型的调用。因为没有这样的构造函数对子类可见。
喜欢:
class Base {
private Base() { }
static Base newInstance() { return new Base(); }
}
类子扩展基{ ...
没有有效的方法来写给Child一个构造函数。因为任何构造函数都必须调用超级构造函数。当然,如果Base有一个非私有的构造函数,那么派生类就有一些super()可以调用。
【讨论】:
如果它只有 个私有构造函数,则不能从子类调用它们。子类需要调用父类的构造函数之一,但它不能,因为它们不可见。即使您没有显式调用父类构造函数,仍然会隐式调用super(),如果默认构造函数是私有的,则调用失败。
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); }
}
【讨论】: