所以,我有這樣的:繼承Java中簡單的澄清
public class A {
public int a = 0;
public void m(){
System.out.println("A"+a);
}
}
這:
public class B extends A {
public int a = 5 ;
public void m(){
System.out.println("B"+a);
}
public static void main(String[] args) {
A oa = new A();
B ob = new B();
A oab = ob;
oa.m();
ob.m();
oab.m();
System.out.println("AA"+oa.a);
System.out.println("BB"+ob.a);
System.out.println("AB"+oab.a);
}
}
輸出:
A0
B5
B5
AA0
BB5
AB0
我不明白爲什麼oab.m();輸出是B5而不是A0。誰可以給我解釋一下這個?
方法'米()''中類B'被覆蓋。 'A'類和'B類'對'm()'都有相同的方法簽名。它是被調用的最具體的方法,因爲'oab'是'class B'的一個實例,所以被稱爲'b.m()'。變量'oab'只是被引用爲類型'A'。 – mrswadge
感謝您的回答 – Falco