Java基礎(chǔ)知識(shí)之接口和抽象類的區(qū)別

Java基礎(chǔ)知識(shí)之接口和抽象類的區(qū)別

1.接口

??接口是抽象方法的集合,一個(gè)接口只有方法的形狀而沒有方法的具體實(shí)現(xiàn),接口是Java面向?qū)ο筇峁┑囊环N機(jī)制。
??Java語言是一種單繼承的猎唁,在類的繼承中通過實(shí)現(xiàn)多個(gè)接口間接實(shí)現(xiàn)了多繼承功能。接口的申明:

[public] interface InterfaceName{
    void method1(int arg1);
    void method2();
    ...
}

2.抽象類

??抽象類是用來捕捉子類的通用特性的 顷蟆。它不能被實(shí)例化,只能被用作子類的超類腐魂。抽象類是被用來創(chuàng)建繼承層級(jí)里子類的模板帐偎。抽象類申明:

[public] abstract class ClassName {
    abstract void fun();
    void fun2();
    ...
}

3.接口和抽象類區(qū)別

??(1)、接口只能包含抽象方法蛔屹,抽象類可以包含普通方法削樊;
??(2)、接口的方法都是完全抽象的兔毒,并且方法必須是public漫贞,而且默認(rèn)方法是public abstract的,抽象中的方法可以被public,protected等修飾符修飾育叁;
??(3)迅脐、子類用implements來實(shí)現(xiàn)接口,子類需要實(shí)現(xiàn)接口中的所有方法豪嗽,但繼承抽象類可以不重寫父類中非抽象方法谴蔑,抽象類中的抽象方法必須被重寫;
??(4)龟梦、一個(gè)類可以實(shí)現(xiàn)多個(gè)接口隐锭,但只能繼承最多一個(gè)抽象類,接口可以繼承一個(gè)或者多個(gè)接口计贰;
??(5)钦睡、抽象類中可以有普通成員變量,接口中沒有普通成員變量躁倒,只能有常量荞怒;
??(6)、抽象類中的方法可以被static修飾樱溉,接口中的方法不可以被static修飾挣输;
??(7)、抽象類可以有構(gòu)造函數(shù)福贞,接口不可以有構(gòu)造函數(shù)撩嚼。
??PS:相同點(diǎn)是都不能實(shí)例化(不能new),都有抽象方法,子類中必須對(duì)父類方法進(jìn)行重寫完丽。

4.接口和抽象類的使用場(chǎng)景

??接口主要用于實(shí)現(xiàn)多繼承的場(chǎng)景和模塊與模塊之間的調(diào)用情況恋技,抽象類主要用于當(dāng)做基礎(chǔ)類使用,即基類(基類里面的一些方法都有默認(rèn)的方法實(shí)現(xiàn)逻族,即實(shí)現(xiàn)接口的公用的代碼蜻底,個(gè)性化的方法由各個(gè)子類去實(shí)現(xiàn))。

5.Demo

??下面看一個(gè)網(wǎng)上流傳最廣泛的例子:門和警報(bào)的例子:門都有open( )和close( )兩個(gè)動(dòng)作:

??抽象類定義:

abstract class Door {
    public abstract void open();
    public abstract void close();
}

??或者接口定義如下:

interface Door {
    void open();
    void close();
}

??但是現(xiàn)在如果我們需要門具有報(bào)警alarm( )的功能聘鳞,那么該如何實(shí)現(xiàn)薄辅?下面提供兩種思路:
??1)將這三個(gè)功能都放在抽象類里面,但是這樣一來所有繼承于這個(gè)抽象類的子類都具備了報(bào)警功能抠璃,但是有的門并不一定具備報(bào)警功能站楚;
??2)將這三個(gè)功能都放在接口里面,需要用到報(bào)警功能的類就需要實(shí)現(xiàn)這個(gè)接口中的open( )和close()搏嗡,也許這個(gè)類根本就不具備open( )和close()這兩個(gè)功能窿春,比如火災(zāi)報(bào)警器。
??從這里可以看出采盒, Door的open() 旧乞、close()和alarm()根本就屬于兩個(gè)不同范疇內(nèi)的行為,open()和close()屬于門本身固有的行為特性磅氨,而alarm()屬于延伸的附加行為尺栖。因此最好的解決辦法是單獨(dú)將報(bào)警設(shè)計(jì)為一個(gè)接口,包含alarm()行為,Door設(shè)計(jì)為單獨(dú)的一個(gè)抽象類悍赢,包含open和close兩種行為决瞳。再設(shè)計(jì)一個(gè)報(bào)警門繼承Door類和實(shí)現(xiàn)Alarm接口。最終的方案源碼如下:

abstract class Door{
    void open();
    void close();
}

interface Alarm {
    void alarm();
}

public class AlarmDoor extends Door implements Alarm {
    void open() {
        ...
    }
    
    void close() {
        ...
    }
    
    void alarm() {
        ...
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末左权,一起剝皮案震驚了整個(gè)濱河市皮胡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赏迟,老刑警劉巖屡贺,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锌杀,居然都是意外死亡甩栈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門糕再,熙熙樓的掌柜王于貴愁眉苦臉地迎上來量没,“玉大人,你說我怎么就攤上這事突想∨固悖” “怎么了究抓?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)袭灯。 經(jīng)常有香客問我刺下,道長(zhǎng),這世上最難降的妖魔是什么稽荧? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任橘茉,我火速辦了婚禮,結(jié)果婚禮上姨丈,老公的妹妹穿的比我還像新娘畅卓。我一直安慰自己,他們只是感情好构挤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布髓介。 她就那樣靜靜地躺著,像睡著了一般筋现。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箱歧,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天矾飞,我揣著相機(jī)與錄音,去河邊找鬼呀邢。 笑死洒沦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的价淌。 我是一名探鬼主播申眼,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蝉衣!你這毒婦竟也來了括尸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤病毡,失蹤者是張志新(化名)和其女友劉穎濒翻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啦膜,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡有送,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了僧家。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雀摘。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖八拱,靈堂內(nèi)的尸體忽然破棺而出阵赠,到底是詐尸還是另有隱情涯塔,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布豌注,位于F島的核電站伤塌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轧铁。R本人自食惡果不足惜每聪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望齿风。 院中可真熱鬧药薯,春花似錦、人聲如沸救斑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脸候。三九已至穷娱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間运沦,已是汗流浹背泵额。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留携添,地道東北人嫁盲。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烈掠,于是被迫代替她去往敵國和親羞秤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容