Tôi có một lớp học, Super
:Quy tắc ra lệnh kế thừa các biến tĩnh trong Java là gì?
public class Super {
public static String foo = "foo";
}
Tôi cũng có một lớp khác, Sub
kéo dài Super
:
public class Sub extends Super {
static {
foo = "bar";
}
public static void main (String[] args) {
System.out.println(Super.foo);
}
}
Khi tôi chạy nó, nó in ra bar
.
thứ ba (và cuối cùng) Lớp học của tôi là Testing
:
public class Testing {
public static void main (String[] args) {
System.out.println(Super.foo);
System.out.println(Sub.foo);
System.out.println(Super.foo);
}
}
in này:
foo
foo
foo
Tôi không hiểu tại sao các nội dung của foo
thay đổi tùy theo những gì lớp bạn đang truy cập nó từ . Bất cứ ai có thể giải thích?
Điều tôi ngụ ý bởi câu lệnh đó là khi tôi truy cập nó từ 'Testing', nó trả về một cái gì đó khác với khi tôi truy cập nó từ' Sub'. – jmgrosen
'@jmgrosen: 'Ah, với bạn bây giờ. –
FWIW, lưu ý sự khác biệt quan trọng giữa những gì bạn có ở trên và những gì bạn sẽ có nếu 'Sub' chứa' public static String foo = "bar"; '(trong đó bạn nhận được" foo "," bar "," foo "như bạn có thể mong đợi). –