php小編西瓜經常收到關於Java中的多態性和靜態綁定的問題。這兩個概念在Java中經常被提及,但對於初學者來說可能會感到困惑。在本文中,我們將簡要介紹多態性與靜態綁定的概念,並解答一些常見問題,幫助讀者更好地理解和應用這些概念。
我對java還是很陌生。所以我一邊玩java一邊閱讀多態性與靜態綁定。我來這裡是為了澄清我的思考過程是否正確。
class a { void foo(a a) { system.out.println("aaaaaa"); } } class b extends a { void foo(b a) { system.out.println("bbbbb"); } } class c extends b{ void foo (a a){ system.out.println("cccccbbbb"); } }
我創建了以下名為 c
的對象,並以 c 作為參數呼叫 foo。
C c = new C(); c.foo(c); // the output is BBBBB
從這篇關於java重載和動態綁定的問題中,我了解到如果在類別中找不到發送的參數,它將把參數(在本例中為c)向上轉換為在類別中可以找到的參數(在此情況a,因為void foo (a a)
)。但如果是這樣的話,它不應該印出“cccccbbbb”嗎?透過靜態綁定?
類別 c
有 2 個重載方法,名稱為 foo
// defined in the class C void foo (A a){ System.out.println("CCCCCBBBB"); } // inherited from the class B void foo(B a) { System.out.println("BBBBB"); }
當我們使用類別c
的參數呼叫方法foo
時,會選擇最具體的一個- 類別b
在層次結構上比類別a
更接近,因此呼叫foo(b)
。
以上是對Java中的多態性和靜態綁定感到困惑的詳細內容。更多資訊請關注PHP中文網其他相關文章!