首頁 > Java > java教程 > Java不支援多繼承的原因是什麼

Java不支援多繼承的原因是什麼

王林
發布: 2023-05-13 10:04:14
轉載
963 人瀏覽過

首先,思考這麼一種場景,假如現在A類繼承了B類和C類,並且B類和C類中,都存在test()方法,那麼當A類對象調用test()方法時,該呼叫B類別的test()呢?還是C類別的test()呢?是沒有答案的,所以Java中不允許多繼承。

但是,Java中介面是可以多繼承的,例如:

public interface A {
    void test();
}
public interface B {
    void test();
}
public interface C extends A, B{
}
登入後複製

為什麼介面可以?

因為都是A、B、C都是接口,就算A、B兩個接口中都定義了test方法,因為接口中只是宣告了方法,並沒有真正實現方法,所以對於C介面而言並不會照成困擾,對於C介面而言它只是繼承了同一個test()方法的宣告而已,使用時需要C介面的實作類別來實作這個test()方法就可以了。

public class C1 implements C{
    public void test() {
        System.out.println("hello Hoeller");
    }
}
登入後複製

那麼介面中不是有default方法嗎?那不是也可以在介面中來實作方法嗎?

我們直接來測試一下:

public interface A {
    default void test() {
        System.out.println("a");
    }
}
public interface B {
    default void test() {
        System.out.println("b");
    }
}
public interface C extends A, B{
}
登入後複製

此時C介面會編譯報錯,報錯資訊為:

com.hoeller.C inherits unrelated defaults for test () from types com.hoeller.A and com.hoeller.B

翻不翻譯都無所謂了,反正就是報錯了,表示C介面不能同時繼承兩個介面中default方法test() 。

以上是Java不支援多繼承的原因是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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