代碼:由於編譯器基於引用類型調用方法,而不是實際的對象類型,爲什麼調用該對象的方法?
public class X
{
public void methodA() //Base class method
{
System.out.println ("hello, I'm methodA of class X");
}
}
public class Y extends X
{
public void methodA() //Derived Class method
{
System.out.println ("hello, I'm methodA of class Y");
}
}
public class Z
{
public static void main (String args []) {
X obj1 = new X(); // Reference and object X
X obj2 = new Y(); // X reference but Y object
obj1.methodA();
obj2.methodA();
}
}
輸出:
hello, I'm methodA of class X
hello, I'm methodA of class Y
從對象類型的方法獲取調用,而不是引用類型。兩條線都不應該是這樣嗎?
hello, I'm methodA of class X
hello, I'm methodA of class X
也許你的第一個假設是錯誤的...這是有趣的,考慮你是正確標記你的問題[標籤:多態性] – dotvav
@HovercraftFullOfEels我不好。我的意思是編譯器決定我們是否可以調用該方法。 –