阿里架構(gòu)師講解Java接口的繼承與抽象類

在實(shí)施接口中,我們利用interface語(yǔ)法,將interface從類定義中獨(dú)立出來(lái),構(gòu)成一個(gè)主體。interface為類提供了接口規(guī)范。

在繼承中,我們?yōu)榱颂岣叱绦虻目蓮?fù)用性,引入的繼承機(jī)制。當(dāng)時(shí)的繼承是基于類的。interface接口同樣可以繼承,以拓展原interface。

在這里插入圖片描述

接口繼承

接口繼承(inheritance)與類繼承很類似,就是以被繼承的interface為基礎(chǔ),增添新增的接口方法原型。比如,我們以Cup作為原interface:

interface Cup {
    void addWater(int w);
    void drinkWater(int w);
}

我們?cè)诶^承Cup的基礎(chǔ)上,定義一個(gè)新的有刻度的杯子的接口,MetricCup

在這里插入圖片描述

接口如下:

interface MetricCup extends Cup
{
    int WaterContent();
}

我們?cè)鎏砹艘粋€(gè)新的方法原型WaterContent(),這個(gè)方法返回一個(gè)整數(shù)(水量)。

interface的多重繼承

在Java類的繼承中,一個(gè)衍生類只能有一個(gè)基類。也就是說(shuō),一個(gè)類不能同時(shí)繼承多于一個(gè)的類。在Java中,interface可以同時(shí)繼承多于一個(gè)interface,這叫做多重繼承(multiple inheritance)。

比如我們有下面一個(gè)Player接口:

interface Player
{
    void play();
}
 

我們新增一個(gè)MusicCup的接口。它既有Cup接口,又有Player接口,并增加一個(gè)display()方法原型。

interface MusicCup extends Cup, Player 
{
    void display();
}

(如何使用interface,見(jiàn)實(shí)施接口)

抽象類

在生活中,我們會(huì)有一些很抽象的概念。這些抽象的概念往往是許多類的集合,比如:

  • 糧食 (可以是玉米、小麥、大米)

  • 圖形 (可以是三角形、圓形、正方形)
    再比如,我們之前舉出了例子:

  • 人類 (可以是男人、女人)
    在組織這樣的關(guān)系時(shí),我們可以使用繼承,比如:


    在這里插入圖片描述

    根據(jù)我們的常識(shí):

  • "Food類的對(duì)象"的說(shuō)法是抽象的。這樣一個(gè)對(duì)象應(yīng)該是屬于Corn, Rice, Wheat子類中的一個(gè)。

  • Food類有eat()方法 (食物可以吃)。然而,這樣的一個(gè)動(dòng)作是抽象的。糧食的具體吃法是不同的。比如Corn需要?jiǎng)兤こ?,Wheat要磨成面粉吃。我們需要在每個(gè)類中覆蓋Food類的eat()方法。

  • 在這里插入圖片描述

    Java中提供了抽象類(abstract class)的語(yǔ)法,用于說(shuō)明類及其方法的抽象性。比如:

abstract class Food {
    public abstract void eat(); 
       public void happyFood();   
        {     
       System.out.println("Good! Eat Me!");   
        }
}

類中的方法可以聲明為abstract,比如上面的eat()。這時(shí),我們不需要具體定義方法,只需要提供該方法的原型。這與接口類似。當(dāng)我們?cè)诒热鏑orn類中繼承該類時(shí),需要提供eat()方法的具體定義。

類中的另一個(gè)方法happyFood()并不是

當(dāng)一個(gè)類中出現(xiàn)abstract方法時(shí),這個(gè)類的聲明必須加上abstract關(guān)鍵字,否則Java將報(bào)錯(cuò)。一個(gè)abstract類不能用于創(chuàng)建對(duì)象。

在這里插入圖片描述

抽象類的繼承

我們可以像繼承類那樣繼承一個(gè)抽象類。我們必須用完整的方法定義,來(lái)覆蓋抽象類中的抽象方法,否則,衍生類依然是一個(gè)抽象類。

抽象類的定義中可以有數(shù)據(jù)成員。數(shù)據(jù)成員的繼承與正常類的繼承相同。

總結(jié)

interface繼承,多重繼承

abstract method, abstract類

點(diǎn)擊鏈接加入群聊【Java交流圈】
](https://jq.qq.com/?_wv=1027&k=0IsBuUb0)

最新2020整理收集的一些高頻面試題(都整理成文檔),有很多干貨,包含mysql,netty,spring,線程,spring cloud、jvm、源碼、算法等詳細(xì)講解,也有詳細(xì)的學(xué)習(xí)規(guī)劃圖,面試題整理等,需要獲取這些內(nèi)容的朋友請(qǐng)加QQ群:
756584822

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容