回覆列表
  • 1 # 啊雄的分享

    不正確,java是單繼承的,如果頂層是抽象類,對於後面的程式碼擴充套件很不利的。而java的介面是多實現的,java官方對於Collection和set、List設計的也都是介面來設計,符合了java的介面多少實現的特性。如果都是設計成抽象類,後面我們在實際開發中,自己的類就沒法實現了。具體它們的結構如下:

    Collection 介面的介面 物件的集合(單列集合)

    ├——-List 介面:元素按進入先後有序儲存,可重複

    │—————-├ ArrayList 介面實現類, 陣列, 隨機訪問, 沒有同步, 執行緒不安全

    │—————-└ Vector 介面實現類 陣列, 同步, 執行緒安全

    │ ———————-└ Stack 是Vector類的實現類

    └——-Set 介面: 僅接收一次,不可重複,並做內部排序

    ├—————-└HashSet 使用hash表(陣列)儲存元素

    │————————└ LinkedHashSet 連結串列維護元素的插入次序

    └ —————-TreeSet 底層實現為二叉樹,元素排好序

  • 2 # 架構師訓練營

    回答此問題前,先上Java的容器架構圖:

    看了上述架構後,應該不會再問上述問題了。如果還會問的話,再展開一二:

    1. Java中介面和抽象類的區別?

    2. 介面和抽象類如何選擇?

    3. 針對介面而非物件程式設計!

    1. Java中介面和抽象類的區別?

    介面

    1. 因為java不支援多重繼承,所以有了介面,一個類只能繼承一個父類,但可以實現多個介面,介面本身也可以繼承多個介面。

    2. 接口裡面的成員變數預設都是public static final型別的。必須被顯示的初始化。

    3. 接口裡面的方法預設都是public abstract型別的。隱式宣告。

    4. 介面沒有構造方法,不能被例項化。

    5. 介面不能實現另一個介面,但可以繼承多個介面。

    6. 類如果實現了一個介面,那麼必須實現接口裡面的所有抽象方法,否則類要被定義為抽象類。

    抽象類

    1. 如果將一個類宣告為abstract,此類不能生成物件,只能被繼承使用。

    2. 抽象方法必須存在於抽象類中。

    3. 抽象類中可以有一般的變數和一般的方法。

    4. 子類繼承抽象類必須實現其中抽象方法,除非子類為抽象類。 private void print(){};此語句表示方法的空實現。 abstract void print(); 此語句表示方法的抽象,無實現。

    介面和抽象類的區別:

    抽象類只能繼承一次,但是可以實現多個介面;介面和抽象類必須實現其中所有的方法,抽象類中如果有未實現的抽象方法,那麼子類也需要定義為抽象類。抽象類中可以有非抽象的方法;介面中的變數必須用 public static final 修飾,並且需要給出初始值。所以實現類不能重新定義,也不能改變其值。介面中的方法預設是 public abstract,也只能是這個型別。不能是 static,介面中的方法也不允許子類覆寫,抽象類中允許有static 的方法。

    介面和抽象類的核心一點,總結一句話:Java特有的介面機制突破了Java單繼承的缺陷,使之擁有了C++一樣的多繼承功能。

    2. 介面和抽象類如何選擇?

    1. 如果預計要建立類的多個版本,則建立抽象類。抽象類提供簡單的方法來控制類版本。

    2. 如果建立的功能將在大範圍的異類物件間使用,則使用介面。

    3. 如果要設計小而簡練的功能塊,則使用介面。

    4. 如果要設計大的功能單元,則使用抽象類。

    5. 如果要向類的所有子類提供通用的已實現功能,則使用抽象

    3 針對介面而非物件程式設計!

    如果上述介面改為抽象類來實現,除了架構問題,使用相關java容器時,如何實現針對介面程式設計?

  • 中秋節和大豐收的關聯?
  • 歷史上秦始皇與孔子誰更偉大?