更新時間:2020-10-16 17:32:52 來源:動力節點 瀏覽1383次
說到Java接口繼承,我們必須先說說接口,接口是一種高度的抽象,里面會規定一些將要實現的行為或只作為一種標記,如Java中的Serializable接口,它比抽象類更加抽象。
然后說一說對繼承的理解,繼承就是泛化。在由接口組成的繼承層級中,從上往下看,是由抽象到具體的過程。通過繼承我們可以保留父接口中定義的行為,同時可以對其進行擴展。整個繼承層級,其實是類似樹結構的,樹的層級越深,行為就越復雜,能做的事情就更多。
上一層是對下一層共性的抽象,下層是對上層不同維度的演進。以Java的集合框架為例,如下圖:
最開始只有一個Iterable,這里只是要返回一個迭代器,它可以用來處理一些可以迭代的對象,可以在foreach或者while循環中迭代。那么哪些對象是可以迭代的呢,于是就有了第二層接口,Collection、Directory Stream(JDK1.7新增nio模塊中)都是可以迭代的。
接下來再往深層考慮,什么樣的算是Collection, JDK中給出定義Collection表示一組對象,稱之為元素,有些集合允許重復,有些不允許,有些無序,有些有序。原文中這樣描述:
A collection represents a group of objects, known as its elements. Some collections allow duplicate elements and others do not. Some are ordered and others unordered.
根據這些描述又有了下一層,Set、List、Queue, 這是針對Collection中不同類型的集合的抽象,其內部會聲明一些特定的方法:
我們發現有很多不同的方法,這個就是對Collection不同維度的演進。職責不斷的細化,對于其他的接口,情況也是一樣的。這點和畫家在創作時先畫出輪廓,然后再一點一點的勾勒細節有異曲同工之妙。
那么接口繼承有什么意義呢?不妨這樣考慮,加入假如沒有接口繼承,會變成什么樣子?假如不讓接口繼承,那么所有接口的方法都放在一個接口中,這時只有一個接口,那么這個接口規定的行為不覺得有點太多了么,既要負責返回一個迭代器,又要是一個集合,而且既要定義有序集合的行為,又要定義無序集合的行為,既要定義有重復元素的集合的行為,又要定義無重復元素集合的行為。
假設只有一個方法來定義集合的行為,請問這個方法該怎么實現。千萬不要說加上一大堆if else的判斷語句,如果這時候有新的集合類型加入了,難道再加上一個if else語句么?無疑這是一種糟爛的設計。反觀通過接口繼承產生的層級接口,層次分析,職責分明,Set就是Set,List就是List,想要實現那種結構直接實現對應的接口即可。換個角度看,通過接口繼承,可以重新定義上層已經定義的行為,也不會影響到同一層級的其他接口中的行為。
在簡單的系統中,當然并不一定用到接口繼承,但一個相對復雜的系統中,如JDK的集合框架,通過接口繼承可以稱得上是一種良好的設計,也是對整個系統結構的一個提升。
好了,對Java接口繼承的相關知識就先講解就到這里,欲知后事如何,請觀看本站的Java零基礎教程,帶你全方位學習Java基礎,為你的Java夢想揚帆起航!
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習