1. 程式人生 > 其它 >Java學習怎麼在Java開發中選擇介面類和抽象類

Java學習怎麼在Java開發中選擇介面類和抽象類

在Java中,我們有介面和抽象類。在選擇哪一個時,我們會給出一些引數,比如選擇支援多個繼承的介面,或者選擇一個抽象類,在父類中提供一些有效的方法(儘管從Java8開始,我們也可以在介面中提供預設方法實現)。

什麼是抽象類?

抽象意味著某件事不是完全具體的——它只是某件事的一個想法或要點。所以當我們談論抽象類時,它意味著一個本身沒有具體實現的類。這只是為其他具體類建立的結構或指南。可以說抽象類是具體類的靈魂。這就是我們“擴充套件”抽象類的原因。抽象類應該只有那些屬性和方法,沒有這些屬性和方法,具體類就不可能存在。

這就是Java不支援抽象類的多繼承的原因。因為一個具體類只能表現(或獲取所有屬性)一個抽象類(顯然,一個實體不能有兩個靈魂)。

什麼是介面?

介面是不同系統之間的行為契約。在Java介面中,我們定義了一個類的行為,它將實現這個介面。一個類可以有許多不同的行為,這就是為什麼Java允許我們“實現”N個介面。介面僅用於提供行為。這就是Java命名約定建議使用形容詞作為介面名稱的原因。

與抽象類建立相關的關鍵要點:

在為具體類提供指導方針時建立抽象類。

抽象類的建立與是否提供任何方法的實現無關。

只將這些屬性和行為新增到抽象類中,否則你的具體類將失去其存在性。

與介面建立相關的關鍵要點:

建立為具體類提供額外行為的介面。當我們將這些介面共享給外部系統時,它就變成了一個契約,這就是為什麼我們說介面是具體類的行為契約。

這些行為對你的班級來說不應該是強制性的。這些行為應該為類新增更多功能。

問這樣一個問題:每當一個具體的類實現你的介面時,它需要介面中提到的所有行為,還是隻需要很少的行為?在多個介面中重構你的介面,直到以上問題的答案是肯定的。

關於抽象類和介面類的問題是面試中很常見的問題,這兩者有太多相似的地方,又有太多不同的地方。很多初學者會把這兩者搞混淆,隨意互換使用,但實則不然。