我已經搜索了關於堆棧溢出的後期綁定的所有類似問題,並且我會嚴重不同意將這個問題標記爲重複的任何人。首先,我在另一個問題上找到了這個例子,但是我不明白在編譯期間何時決定什麼時候以及何時在運行時決定什麼時我應該知道該怎麼做。基本上,我的問題的癥結歸結爲兩點:Java中的後期綁定
在什麼這個例子必須帶我到邏輯結論,一個方法是後期綁定而另一個早期綁定
如何我知道什麼時候決定哪些執行方法的版本在運行時決定或編譯時在Java中
代碼:
class A
{
public void foo()
{
System.out.println("Class A");
}
}
class B extends A
{
public void foo()
{
System.out.println("Class B");
}
}
public class C
{
public static void main(String [] args)
{
A a=new A();
B b=new B();
A ref=null;
/*
early binding --- calls method foo() of class A and
decided at compile time
*/
a.foo();
/* early binding --- calls method foo() of class B and
decided at compile time
*/
b.foo();
/* late binding --- --- calls method foo() of class B and
decided at Run time
*/
ref=b;
ref.foo(); }
}
最後的靜態或私有方法不會發生後期綁定。對於任何其他它確實如此。就這些。 – Pshemo
給未來讀者的提示:上面代碼中的註釋不正確! –
如果我的回答很有幫助,您可以請修改意見然後 – user3163829