Java中接口的多继承
我們知道Java的類只能繼承一個(gè)類,但可以實(shí)現(xiàn)多個(gè)接口。但是你知道么?Java中的接口卻可以繼承多個(gè)接口。本文就來說一說Java中接口的多繼承。
進(jìn)入主題之前,先擴(kuò)展一下。Java為什么只支持單繼承呢?
我們不妨假設(shè)Java支持多繼承,舉個(gè)例子,在這里有個(gè)A類,我們又編寫了兩個(gè)類B類和C類,并且B類和C類分別繼承了A類,并且對(duì)A類的同一個(gè)方法進(jìn)行了覆蓋。如果此時(shí)我們?cè)俅尉帉懥艘粋€(gè)D類,并且D類以多繼承的方式同時(shí)集成了B類和C類,那么D類也會(huì)繼承B類和C類從A類中重載的方法,如下圖所示。那么問題來了,D類也開始犯迷糊了,我到底應(yīng)該哪個(gè)繼承哪個(gè)類中的方法呢,因?yàn)轭愂墙Y(jié)構(gòu)性的,這樣就會(huì)造成結(jié)構(gòu)上的混亂。這就是多繼承的菱形繼承問題。
同時(shí)我們知道C++是支持多繼承的,因?yàn)樗鉀Q了這個(gè)問題(我對(duì)C++不太熟,查了下資料,好像是通過虛基類實(shí)現(xiàn)的吧)。但是Java本著簡(jiǎn)單的原則,舍棄了多繼承。
好,進(jìn)入正題。我們還是舉個(gè)實(shí)例來演示一下接口的多繼承。
燕子是鳥,鳥會(huì)飛,也會(huì)唱歌。我們來模仿一下:
一、會(huì)飛的接口
package multiex;public interface Flyable {public void fly(); }二、會(huì)唱歌的接口
package multiex;public interface Singable {public void sing(); }三、鳥的接口
鳥的接口繼承上面兩個(gè)接口
四、燕子類,實(shí)現(xiàn)鳥接口
package multiex;//燕子類 public class Swallow implements Bird {@Overridepublic void fly() {System.out.println("燕子會(huì)飛");}@Overridepublic void sing() {System.out.println("燕子會(huì)唱歌");} }五、測(cè)試類
package multiex;public class Main {public static void main(String[] args) {Swallow swallow = new Swallow();swallow.fly();swallow.sing();} }運(yùn)行結(jié)果:
上面演示了接口的多繼承,那么這里存在一個(gè)問題。如果多個(gè)接口中有重名的方法怎么辦?比如如下:
package multiex;interface A {void m(); } //注意:方法返回值不一樣 interface B {int m(); }class C implements A, B {public void m() {System.out.println("void m()");}public int m() {System.out.println("int m()");} }public class Test {public static void main(String[] args) {C c1 = new C();c1.m();} }這時(shí),編譯將無法通過。如下圖所示:
因?yàn)樵贘ava中,
方法名+參數(shù)(不含返回值類型)唯一確定一個(gè)方法。
方法名+參數(shù)(不含返回值類型)唯一確定一個(gè)方法。
方法名+參數(shù)(不含返回值類型)唯一確定一個(gè)方法。
所以當(dāng)返回值不同時(shí),Java認(rèn)為這還是同一個(gè)方法,會(huì)與其中一個(gè)接口的返回類型沖突。導(dǎo)致編譯錯(cuò)誤。
同理,當(dāng)返回值相同時(shí),那這完全就是同一個(gè)方法了,實(shí)現(xiàn)類實(shí)現(xiàn)一次這個(gè)方法就好了。如下圖:
怎么樣?同學(xué)你懂了沒?
?
作者:小北覓
鏈接:https://www.jianshu.com/p/017f1a6d6fd9
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。
總結(jié)
以上是生活随笔為你收集整理的Java中接口的多继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10年前美国GDP占世界总量超23%,中
- 下一篇: JavaMonitor 监视器