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

