这个受保护的私有构造函数组合是如何工作的?
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);
}
答案 0 :(得分:2)
我已经看到了这个问题,这是准备SUN认证的众多样本问题之一。您可以在此文档中找到问题:Sun Certification。
有些网站有这个问题,但是它们缺少组件或写得不正确而无法编译,但答案仍然是420;
我将假设OP副本并粘贴其中一个网站的代码。
正确的代码应该是两个单独的类,写成:
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);
}
}
回答有关其工作原理的问题:
子类可以通过调用super(...)来访问其Parent的构造函数,因此在这种情况下将 420 分配给 numberOfInstances 。如果您不熟悉继承,我建议您自己研究,但是,为了简短,子类或子类继承其父级的所有公共成员和受保护成员。
因此,当您调用 ext.numberOfInstances 时,输出将为420.通过首先调用子类构造函数来分配该值,然后子类构造函数使用 super调用父构造函数(420 )然后将值分配给 numberOfInstances 。