在下面的示例中,为什么字符串b打印为null,而字符串c打印为“ gg”。
如果我错了,请纠正我,只要子类(BClass)重写超类(AClass)的受保护方法(即initClass())。如果实例化该子类。超类必须使用子类指定的替代方法。
public class Example {
public class AClass {
private String a;
public AClass() {
initClass();
}
protected void initClass() {
a = "randomtext";
}
}
public class BClass extends AClass {
private String b = null;
private String c;
@Override
protected void initClass() {
b = "omg!";
c = "gg";
}
public void bValue() {
System.out.println(b); // prints null
System.out.println(c); // prints "gg"
}
}
public static void main(String[] args) {
Example.BClass b = new Example().new BClass();
b.bValue();
}
}
在示例中,您可以看到执行顺序。第一步是从构造器到Object
构造器的调用。之后发生这种情况:
接下来,将执行类[...]的实例变量的所有初始化程序。
由于您的实例变量b初始化为null,之后它将再次为null
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句