我就遇到了這個例子將網上的遺產,我關於它的結果是不容易的。我錯過了一些關鍵的東西。繼承在Java中
public class A {
int i = 5;
public A() {
foo();
}
private void foo() {
System.out.println(i);
}}
public class B extends A {
int i = 6;}
public class C extends B {
int i = 7;
public void foo() {
System.out.println("C's foo");
System.out.println(super.i);
}}
我試圖弄清是怎麼通過以下命令發生的事情:C c = new C(); System.out.println(C.i);
我知道,當我們創建的C
一個新實例我們接近A和B的constructures,所以我們達到A()
- (問題1)i
(A)正在初始化嗎? 現在我們需要調用foo()
- (問題2) - 請問C'S foo()
考慮爲A的foo()
的重寫?如果B有自己的foo()
會怎麼樣?那麼它被認爲是一個覆蓋和C的foo()
被操作?
據我所知,沒有覆蓋,當它涉及到局部變量。 System.out.println(c.i)
怎麼是7而不是5?難道不應該是最高父親的i
?
編輯:我的問題是不是該Foo和當我使用C I將被使用,大約是在這兩個特定的命令會發生什麼,造成明顯的使用A的foo和不是C的。
非常感謝。
Hi jon。通過這兩個命令程序打印:5 7. 爲什麼它首先打印5? – Numerator
@Nir:構造函數調用到'foo()'打印A.i,這是5. –
爲什麼C的foo()沒有被調用?因爲A的foo()是私人的? – Numerator