Hãy nhìn vào mã này:Java - kéo dài tại sao biến siêu a là 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();
}
}
kết quả: console in: 0 9
Tôi biết rằng lớp con đầu tiên sẽ gọi cha constructor
nhưng, tại sao là 0 9
, không phải là 8 9
?
Bạn có chắc chắn hàm tạo được gọi theo thứ tự bạn nghĩ không? –
@ cricket_007: Tất nhiên nó được gọi. Bạn ** không thể ** tránh gọi nó trong Java. –
@ T.J.Crowder Bạn có thể tránh nó bằng cách sử dụng serialization hoặc nhân bản. – Flown