Java - 扩展为什么超级变量 a 为 0
Java - extends why the super variable a is 0
请看这段代码:
class Sup {
int a = 8;
public void printA() {
System.out.println(a);
}
Sup() {
printA();
}
}
public class Sub extends Sup {
int a = 9;
@Override
public void printA() {
System.out.println(a);
}
Sub() {
printA();
}
public static void main(String[] args) {
Sub sub = new Sub();
}
}
结果:
控制台打印: 0 9
我知道子类会先调用超类constructor
但是,为什么是 0 9
,而不是 8 9
?
当 Sup
构造函数调用 printA()
时,它执行 class Sub
的 printA
方法(它覆盖 Sub
的同名方法=22=] Sup
), 所以它 returns class Sub
的 a
变量的值仍然是 0
, 因为Sub
的实例变量尚未初始化(它们仅在 Sup
构造函数完成后才初始化)。
请看这段代码:
class Sup {
int a = 8;
public void printA() {
System.out.println(a);
}
Sup() {
printA();
}
}
public class Sub extends Sup {
int a = 9;
@Override
public void printA() {
System.out.println(a);
}
Sub() {
printA();
}
public static void main(String[] args) {
Sub sub = new Sub();
}
}
结果:
控制台打印: 0 9
我知道子类会先调用超类constructor
但是,为什么是 0 9
,而不是 8 9
?
当 Sup
构造函数调用 printA()
时,它执行 class Sub
的 printA
方法(它覆盖 Sub
的同名方法=22=] Sup
), 所以它 returns class Sub
的 a
变量的值仍然是 0
, 因为Sub
的实例变量尚未初始化(它们仅在 Sup
构造函数完成后才初始化)。