區分和使用抽象類與接口

抽象類的三個特性(abstract)

  • 抽象類不容許被實例化只能被繼承,也就是說你不能new 出來一個抽象類的對象。
  • 抽象類裏面有兩種屬性和方法code

    • 抽象屬性和方法:只聲明,不實現
    • 非抽象屬性和方法:聲明 + 實現
  • 子類實現抽象方法:子類必須實現父類中的全部抽象方法。

接口的三個屬性(interface)

  • 接口不能包含屬性
  • 接口只能聲明方法,不能包含實現代碼
  • 類實現接口類的時候,必須實現接口中聲明的全部方法

抽象類和接口的區別

  • 抽象類是對成員變量和方法的抽象,是一種is-a關係,是爲了解決代碼複用問題
is-a:表明類與類之間的繼承關係
    好比:貓和狗都是動物,都繼承動物的特性。(所謂動物的特性就至關於抽象類中的抽象屬性和方法、貓和狗都具備動物的特性,即實現動物的抽象屬性)
  • 接口僅僅是解決對方法的抽象(抽象類 - 類的抽象),是一種has-a關係,是爲了解決解耦問題,提升代碼的擴展性
has-a:表明對象和它的屬性之間的從屬關係
    同一個類的對象,經過它的屬性的不一樣值來區別
    好比:小明和小紅 都是同一個類(Person) 可是他們有不一樣的屬性值(Person xiaoming = new Person("小明"))是一個總體和部分的關係

二者再區別

  • 抽象類 - 強調它是什麼

    B 繼承 抽象類A 並實現了 A 中的抽象屬性和方法,那麼它就屬於 A
    好比 鳥(有翅膀、尖嘴、會下蛋) -繼承- B(會說人話):B繼承鳥類這個抽象類那麼他就得實現鳥類得相關特性,因此它就是一隻鸚鵡對象

  • 接口 - 強調它有什麼功能

    Man 和 Woman實現 接口Person 重寫 Person 中的相關方法來,可是賦予了不一樣內容,進而有了不一樣的能力繼承

總結

  • 抽象類是爲了解決代碼複用問題

    好比你要寫全部的不少鳥相關的類、你把每一個鳥都有的屬性寫在抽象類中、而後再在子類當中寫入不一樣的鳥所特有的屬性,這樣就不用再在子類中添加這些屬性。使得代碼高度複用接口

  • 接口是爲了解決抽象問題

    好比說你要寫王者榮耀裏全部的的英雄的技能,假設這些英雄都只有3個技能,那麼咱們就在接口中定義(技能1、技能2、技能三)便可、而後每一個英雄的技能在子類中具體實現便可。變量

相關文章
相關標籤/搜索