一文講通Java為什么不支持多繼承原理
正文
首先,思考這么一種場景,假如現(xiàn)在A類繼承了B類和C類,并且B類和C類中,都存在test()方法,那么當A類對象調(diào)用test()方法時,該調(diào)用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方法,因為接口中只是聲明了方法,并沒有真正實現(xiàn)方法,所以對于C接口而言并不會照成困擾,對于C接口而言它只是繼承了同一個test()方法的聲明而已,在使用時需要C接口的實現(xiàn)類來實現(xiàn)這個test()方法就可以了。
public class C1 implements C{
public void test() {
System.out.println("hello Hoeller");
}
}
那么接口中不是有default方法嗎?那不是也可以在接口中來實現(xiàn)方法嗎?
我們直接來測試一下:
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()。
如果你問,那為什么C++中可以支持多繼承,那得解釋菱形繼承、虛繼承,本文就不分析了(因為我也不知道)。
以上就是一文講通Java為什么不支持多繼承原理的詳細內(nèi)容,更多關(guān)于Java不支持多繼承的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java實現(xiàn)異步回調(diào)返回給前端的方法示例
在Java中實現(xiàn)異步回調(diào)并將結(jié)果返回給前端,通常是在Web應(yīng)用開發(fā)中處理耗時操作時所采用的技術(shù)手段,以避免阻塞HTTP請求線程并提高用戶體驗,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下2024-03-03
SpringBoot使用MyBatis-Flex實現(xiàn)靈活的數(shù)據(jù)庫訪問
MyBatisFlex是一款優(yōu)秀的持久層框架,本文主要介紹了SpringBoot使用MyBatis-Flex實現(xiàn)靈活的數(shù)據(jù)庫訪問,具有一定的參考價值,感興趣的可以了解一下2024-06-06
javax.validation包里@NotNull等注解的使用方式
這篇文章主要介紹了javax.validation包里@NotNull等注解的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
SpringMVC利用dropzone組件實現(xiàn)圖片上傳
這篇文章主要介紹了SpringMVC利用dropzone組件實現(xiàn)圖片上傳,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-02-02

