【发布时间】:2014-08-23 04:39:39
【问题描述】:
这种受保护的和私有的构造函数组合如何工作?
class ClassA {
public int numberOfInstances;
protected ClassA(int numberOfInstances) {
this.numberOfInstances = numberOfInstances;
}
}
public class ExtendedA extends ClassA {
private ExtendedA(int numberOfInstances) {
super(numberOfInstances);
}
}
public static void main(String[] args) {
ExtendedA ext = new ExtendedA(420);
System.out.print(ext.numberOfInstances);
}
【问题讨论】:
-
你的代码能编译吗?
-
你从哪里得到这个代码?
-
这不起作用。起初我在想,也许整个 code-sn-p 应该被包装在某种
public class Foo { ... }中(在这种情况下,Foo中的任何代码都可以访问任何类的private成员,包括构造函数在Foo) 中声明,但后来我意识到如果是这样,那么您的静态方法main将无法实例化您的非静态嵌套类ExtendedA。所以,-1。请发布一个最小的、完整的、可验证的示例来证明您的问题。 -
@ruakh 正如你所说,不能有任何其他类 foo 因为 ExtendedA 已经是公开的,并且没有其他类可以公开
-
@SpringLearner 这不是真的,因为如果所有这些类都包装在
public class Foo { ... }中,那么ExtendedA将是一个嵌套类,并且允许它们是私有的、公共的、受保护的或包私有的。 docs.oracle.com/javase/tutorial/java/javaOO/nested.html
标签: java class constructor