嗨,我不知道編譯器如何確定執行哪個方法。我知道有編譯時間和執行時間。我們有重載方法。靜態綁定與動態綁定
public class A{
void print(A x){
System.out.println("This is message A");
}
}
public class B extends A{
void print (B x){
System.out.println("This is message B");
}
}
A a = new A();
B b = new B();
A ab = new B();
b.print(a);
b.print(ab);
在這兩個調用的結果是:
這是消息中的
什麼是'b.f'?有沒有這樣的方法... –
我認爲方法f是什麼,但打印?如果是這樣的話,你傳遞了a和ab兩個都聲明爲A類型。所以它總是會調用void print(A x),因爲它接受類型A的對象 –
不要將重載與重寫混淆。這是兩個不同的面向對象的概念。如果它與超類中的簽名具有相同的簽名,則將覆蓋子類中的方法。 –