一文講通Java為什么不支持多繼承原理
正文
首先,思考這么一種場(chǎng)景,假如現(xiàn)在A類繼承了B類和C類,并且B類和C類中,都存在test()方法,那么當(dāng)A類對(duì)象調(diào)用test()方法時(shí),該調(diào)用B類的test()呢?還是C類的test()呢?是沒有答案的,所以Java中不允許多繼承。
但是,Java中接口是可以多繼承的,比如:
public interface A { void test(); } public interface B { void test(); } public interface C extends A, B{ }
為什么接口可以?
因?yàn)槎际茿、B、C都是接口,就算A、B兩個(gè)接口中都定義了test方法,因?yàn)榻涌谥兄皇?strong>聲明了方法,并沒有真正實(shí)現(xiàn)方法,所以對(duì)于C接口而言并不會(huì)照成困擾,對(duì)于C接口而言它只是繼承了同一個(gè)test()方法的聲明而已,在使用時(shí)需要C接口的實(shí)現(xiàn)類來實(shí)現(xiàn)這個(gè)test()方法就可以了。
public class C1 implements C{ public void test() { System.out.println("hello Hoeller"); } }
那么接口中不是有default方法嗎?那不是也可以在接口中來實(shí)現(xiàn)方法嗎?
我們直接來測(cè)試一下:
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{ }
此時(shí)C接口會(huì)編譯報(bào)錯(cuò),報(bào)錯(cuò)信息為:
com.hoeller.C inherits unrelated defaults for test() from types com.hoeller.A and com.hoeller.B
翻不翻譯都無所謂了,反正就是報(bào)錯(cuò)了,表示C接口不能同時(shí)繼承兩個(gè)接口中default方法test()。
如果你問,那為什么C++中可以支持多繼承,那得解釋菱形繼承、虛繼承,本文就不分析了(因?yàn)槲乙膊恢溃?/p>
以上就是一文講通Java為什么不支持多繼承原理的詳細(xì)內(nèi)容,更多關(guān)于Java不支持多繼承的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringCloud修改Feign日志記錄級(jí)別過程淺析
OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開發(fā),讓開發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成2023-02-02SpringMVC請(qǐng)求的路徑變量里面寫正則表達(dá)式的方法
這篇文章主要介紹了SpringMVC請(qǐng)求的路徑變量里面寫正則表達(dá)式的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09java集合框架的體系結(jié)構(gòu)詳細(xì)說明
最近在一本J2EE的書中看到了很不錯(cuò)的對(duì)集合框架的說明文章2012-11-11Java練習(xí)之潛艇小游戲的實(shí)現(xiàn)
這篇文章主要和大家分享一個(gè)Java小練習(xí)——利用Java編寫一個(gè)潛艇小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03SpringBoot增強(qiáng)Controller方法@ControllerAdvice注解的使用詳解
這篇文章主要介紹了SpringBoot增強(qiáng)Controller方法@ControllerAdvice注解的使用詳解,@ControllerAdvice,是Spring3.2提供的新注解,它是一個(gè)Controller增強(qiáng)器,可對(duì)controller進(jìn)行增強(qiáng)處理,需要的朋友可以參考下2023-10-10在 Spring Boot 項(xiàng)目中實(shí)現(xiàn)文件下載功能
這篇文章主要介紹了在 Spring Boot 項(xiàng)目中實(shí)現(xiàn)文件下載功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09