大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 實(shí)例講解Java接口多繼承

實(shí)例講解Java接口多繼承

更新時(shí)間:2020-10-28 17:52:51 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1341次

  我們都知道Java的類只能繼承一個(gè)類,但可以實(shí)現(xiàn)多個(gè)接口。然而很多人其實(shí)不知道Java中的接口卻可以繼承多個(gè)接口,這兩者之前并不沖突。本文就來說一說Java接口多繼承的相關(guān)知識。


  進(jìn)入主題之前,為了更方便我們理解Java接口多繼承,我們先來拓展一下。Java為什么只支持單繼承呢?

  我們不妨假設(shè)Java支持多繼承,舉個(gè)例子,在這里有個(gè)A類,我們又編寫了兩個(gè)類B類和C類,并且B類和C類分別繼承了A類,并且對A類的同一個(gè)方法進(jìn)行了覆蓋。如果此時(shí)我們再次編寫了一個(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è)問題(我對C++不太熟,查了下資料,好像是通過虛基類實(shí)現(xiàn)的吧)。但是Java本著簡單的原則,舍棄了多繼承。

  好,進(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è)接口

  package multiex;

  //雖然這個(gè)接口沒有定義方法,但是會(huì)繼承下來兩個(gè)方法

  public interface Bird extends Flyable,Singable {

  }


  四、鸚鵡類,實(shí)現(xiàn)鳥接口

  package multiex;

  //鸚鵡類

  public class Swallow implements Bird {

  @Override

  public void fly() {

  System.out.println("鸚鵡會(huì)飛");

  }

  @Override

  public void sing() {

  System.out.println("鸚鵡會(huì)唱歌");

  }

  }


  五、測試類

  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í),編譯將無法通過。如下圖所示:

  image.png


  因?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è)方法就好了。如下圖:

  image.png


  通過本文的實(shí)例講解,相信小伙伴們已經(jīng)徹底搞清楚了Java接口多繼承,也知道了Java接口多繼承和Java類單繼承的差別。想要掌握更多的Java接口知識,本站的Java接口教程是你的不二選擇,海量高質(zhì)量Java接口知識點(diǎn)羅列清晰,幫你查漏補(bǔ)缺!


提交申請后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 深夜免费福利 | 亚洲va精品中文字幕动漫 | 日韩国产欧美一区二区三区在线 | 久久影视在线观看 | 波多野结衣二区 | 国产深夜福利19禁在线播放 | 夜夜操操操 | 国产成人综合亚洲动漫在线 | 中日韩欧美在线观看 | 久久久午夜 | 亚洲你xx我xx网站 | 久久vs国产综合色大全 | 亚洲精品美女久久久aaa | 久久久久日韩精品无 | 午夜一区 | 久久精品国产欧美 | 欧美成人性生活视频 | 国产精品乱码在线观看 | 91香蕉在线观看 | 欧美一区二区三区视频 | 国产成人综合久久精品亚洲 | 九热视频 | 不卡视频在线 | 日日撸夜夜干 | 亚洲va欧美va国产 | 欧美ⅹxxxx18性欧美 | 成人国产在线视频在线观看 | 亚洲五月激情 | 九色av99久久 | 四虎影视在线 | 免费看欧美一级片 | 狼狼色丁香久久女婷婷综合 | 人人干天天干 | 青青青爽线在线视频观看 | 伊人久久国产免费观看视频 | 国产一区二区三区高清视频 | 国产精品99精品久久免费 | 深夜成人在线 | 国产一区二区三区视频在线观看 | 欧美日本激情 | 成人精品一区二区不卡视频 |