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