類煞烫、抽象類浑此、接口之間的區(qū)別

類累颂、抽象類滞详、接口之間的區(qū)別

從含義上講區(qū)別

  • :可以理解為一個(gè)模具,它定義了一個(gè)具體對(duì)象應(yīng)該具有的屬性和行為紊馏,利用類可以創(chuàng)建具有相同屬性和行為的多個(gè)對(duì)象料饥。

    如:“老虎”就是一個(gè)類,它的皮毛是黃黑相間的(屬性)朱监,它捕食食草動(dòng)物(行為)岸啡。

  • 抽象類:抽象類是對(duì)多個(gè)類具有的共同的屬性和行為的提煉,因此抽象類中包含了子類共有的成員變量和方法赫编。抽象類中包含的方法分為兩類:

    • 子類共有的方法巡蘸。每個(gè)子類對(duì)這些方法的實(shí)現(xiàn)是相同的奋隶,因此抽象類中給出了這些方法的具體的實(shí)現(xiàn),一旦定義好悦荒,所有子類均共享該方法唯欣。
    • 各子類需要具體實(shí)現(xiàn)的抽象方法。每個(gè)子類對(duì)這些方法實(shí)現(xiàn)的方式各不相同搬味,但具有相同的特征(觸發(fā)條件和結(jié)果——即輸入和輸出)境氢,因而這些方法在抽象類中僅有聲明、而沒有具體實(shí)現(xiàn)碰纬,由各子類完成具體的實(shí)現(xiàn)萍聊。

    如:“貓科動(dòng)物”就是一個(gè)抽象類,該類定義了此類動(dòng)物擅長(zhǎng)攀爬和跳躍悦析、喜歡獨(dú)居等屬性寿桨,并具有食肉、捕殺等行為强戴;該類對(duì)多種動(dòng)物的特征進(jìn)行的抽象總結(jié)牛隅,需要通過“老虎”、“貓”酌泰、“獵豹”等子類來實(shí)現(xiàn)媒佣,且每個(gè)子類具有其特有的屬性、并對(duì)對(duì)上述行為的實(shí)現(xiàn)方式各不相同陵刹。

  • 接口:接口可以理解為一種協(xié)議(或者說規(guī)則)默伍,不同于類和抽象類關(guān)注類別、接口關(guān)注的是行為衰琐,它定義了一類行為的規(guī)則(即輸入和輸出)也糊。不同的類可以對(duì)接口中定義的行為有不同的實(shí)現(xiàn)方式、同一個(gè)類也可以實(shí)現(xiàn)多個(gè)接口羡宙。

    如:當(dāng)一個(gè)軟件被劃分為多個(gè)模塊由不同小組來開發(fā)時(shí)狸剃,每個(gè)小組只需要提供自己負(fù)責(zé)的模塊的接口以規(guī)定其余模塊與自己模塊間的交互方式,每個(gè)小組也不需要關(guān)注其他模塊的內(nèi)部實(shí)現(xiàn)狗热。

從語(yǔ)法上講區(qū)別

  • :使用class關(guān)鍵字標(biāo)識(shí)

    public class A {
      private static member; // 成員變量
      ...
      public A() {} // 構(gòu)造函數(shù)
      public void method() {} // 方法
      ...
    }
    
  • 抽象類:使用abstract關(guān)鍵字標(biāo)識(shí)抽象類钞馁,使用extends關(guān)鍵字繼承抽象類

    public abstract class A {
      private static member; // 成員變量
      ...
      public A() {} // 構(gòu)造函數(shù)
      public void method1() {} // 普通方法
      ...
      public abtract void method2(); // 抽象方法,無函數(shù)體
      ...
    }
    
    public class B extends A {
      public void method2() {} // 抽象方法的實(shí)現(xiàn)
    }
    
  • 接口:使用interface關(guān)鍵字標(biāo)識(shí)接口匿刮,使用implements關(guān)鍵字實(shí)現(xiàn)接口

    public interface A {
      int member; // 成員變量必須為public static final僧凰,可以省略
      
      // 無構(gòu)造函數(shù)
      
      int method1(); // 接口中方法的聲明默認(rèn)訪問方式為public,可以省略熟丸,無函數(shù)體
      int method2();
      ...
    }
    
    public class B implements A {
      public int method1() {} // 接口的實(shí)現(xiàn)
      public int method2() {}
      ...
    }
    
  • ** 接口和抽象類的區(qū)別 **

    1. 一個(gè)類只能繼承一個(gè)抽象類训措,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
    2. 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的绩鸣;且必須給其初值怀大,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值呀闻;抽象類中的變量默認(rèn)是 default 型叉寂,其值可以在子類中重新定義,也可以重新賦值总珠。
    3. 抽象類中可以有非抽象方法屏鳍,接口中則不能有非抽象方法。
    4. 接口可以省略 abstract 關(guān)鍵字局服,抽象類不能钓瞭。
    5. 接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法,而抽象類可以有靜態(tài)代碼塊和靜態(tài)方法淫奔;

從使用上講區(qū)別

  • 接口/類可以繼承多個(gè)接口以組成新接口山涡、但抽象類只能繼承一個(gè)抽象類。
  • Java 的單繼承性決定了類只能繼承一個(gè)類唆迁、但可以實(shí)現(xiàn)多個(gè)接口鸭丛。因此接口可以使一個(gè)類除繼承的主類的行為外、還能具有一些其他類具有的行為唐责,實(shí)現(xiàn)了類型的多重繼承鳞溉。
  • 抽象類里可以有普通方法,因此在抽象類中添加一個(gè)方法鼠哥,其所有子類均具有了該方法熟菲;而若在接口里添加一個(gè)新方法,其所有子類需要首先先實(shí)現(xiàn)該方法朴恳。

如何使用

  • 在下列情況下抄罕,請(qǐng)考慮使用抽象類:
    • 希望在幾個(gè)相關(guān)的類之間共享代碼。
    • 希望繼承抽象類的子類們具有許多通用的方法或字段于颖,或者需要除public之外的訪問修飾符(例如protectedprivate)呆贿。
    • 希望聲明non-staticnon-final的字段,以便定義可以改變具有這些屬性的對(duì)象的狀態(tài)的方法森渐。
  • 在下列情況下做入,請(qǐng)考慮使用接口:
    • 希望不相關(guān)的類實(shí)現(xiàn)相同的方法。 例如章母,Comparable和Cloneable接口由許多不相關(guān)的類實(shí)現(xiàn)母蛛。
    • 希望指定特定數(shù)據(jù)類型的行為,但不關(guān)心誰實(shí)現(xiàn)其行為乳怎。
    • 希望利用類型的多重繼承。

經(jīng)典設(shè)計(jì)模式

缺省適配模式:

graph LR
A[接口] --> B[抽象類]
B --> C[普通類]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蚪缀,隨后出現(xiàn)的幾起案子秫逝,更是在濱河造成了極大的恐慌,老刑警劉巖询枚,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件违帆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡金蜀,警方通過查閱死者的電腦和手機(jī)刷后,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渊抄,“玉大人尝胆,你說我怎么就攤上這事』よ耄” “怎么了含衔?”我有些...
    開封第一講書人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)二庵。 經(jīng)常有香客問我贪染,道長(zhǎng),這世上最難降的妖魔是什么催享? 我笑而不...
    開封第一講書人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任杭隙,我火速辦了婚禮,結(jié)果婚禮上因妙,老公的妹妹穿的比我還像新娘寺渗。我一直安慰自己,他們只是感情好兰迫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開白布信殊。 她就那樣靜靜地躺著,像睡著了一般汁果。 火紅的嫁衣襯著肌膚如雪涡拘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,906評(píng)論 1 290
  • 那天据德,我揣著相機(jī)與錄音鳄乏,去河邊找鬼。 笑死棘利,一個(gè)胖子當(dāng)著我的面吹牛橱野,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播善玫,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼水援,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜗元,我...
    開封第一講書人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤或渤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奕扣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薪鹦,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年惯豆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了池磁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡楷兽,死狀恐怖地熄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拄养,我是刑警寧澤离斩,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站瘪匿,受9級(jí)特大地震影響洲脂,放射性物質(zhì)發(fā)生泄漏苟耻。R本人自食惡果不足惜驱闷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一帚豪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顽染,春花似錦漾岳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至唧垦,卻和暖如春捅儒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背振亮。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工巧还, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坊秸。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓麸祷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親褒搔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阶牍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350

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

  • 抽象類與接口是java語(yǔ)言中對(duì)抽象概念進(jìn)行定義的兩種機(jī)制喷面,正是由于他們的存在才賦予java強(qiáng)大的面向?qū)ο蟮哪芰ΑK?..
    進(jìn)階中成為巨人閱讀 527評(píng)論 1 1
  • 一、繼承 1. 概述 繼承是面向?qū)ο蟮闹匾卣髦凰愦椋?dāng)多個(gè)類中存在相同的屬性和行為時(shí)生宛,將這些內(nèi)容抽取到單獨(dú)一個(gè)類中...
    陳凱冰閱讀 351評(píng)論 0 2
  • 雖然現(xiàn)在出了IP7....但我仍然想跟大家分享我那IP6賬號(hào)被盜的故事...算是攻略... 小編我以前只用山寨機(jī)的...
    男神伽羅瓦閱讀 850評(píng)論 1 0
  • 盤古開天辟地之后陷舅,結(jié)束了渾沌世界。上帝造人审洞,開啟了人類改造創(chuàng)造世界的大幕莱睁。 上帝給與人類一個(gè)靈活的大腦,給與一雙靈...
    金紫緣閱讀 529評(píng)論 12 12
  • 記憶中芒澜,逢年過節(jié)仰剿,吃水餃?zhǔn)亲罡叽觥?倒一些面粉,加入適量清水痴晦,揉成面團(tuán)南吮,用刀切成一個(gè)小的面團(tuán),搟面杖輕輕搟幾下誊酌,...
    陶二木閱讀 1,001評(píng)論 0 1