首頁 > Java > 對Java中的多態性和靜態綁定感到困惑

對Java中的多態性和靜態綁定感到困惑

PHPz
發布: 2024-02-11 09:30:08
轉載
664 人瀏覽過

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中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板