[ Java ] 關於Interface 與 Abstract 的區別

在網路上看到一些資料與敘述

主要是幫助理解 Interface 與 Abstract 的用法與用意

而這篇筆記是一些心得與感想





剛開始寫Java的時候非常的不解為何有 Interface 與 Abstrace

這兩種表面上意義非常地相似,使用起來卻又有點差異

常常搞不清楚該怎麼使用或是如何設計

經過好長一段的時間才理解一點裡頭的精髓

以下是整理出一些理解的套路

這些只是要用來提醒自己一些思考上的脈絡

有錯誤也歡迎糾正

1. 要知道繼承 extends 是什麼意思

2. 要知道實作 implements 是什麼意思

      ( implements 有實作、實施的意思 )

3. 要知道為何 class implements 一個介面或者 extends 一個抽象類別之後要實作其定義的行為出來 ( 看不懂這個問題的話,要回去翻翻 interface 與 abstract class 的資料 )

4. 為什麼 abstract class implements 就算不實作也可以通過編譯?

      ( abstract 有抽象的、純概念的意思 )

5. 為什麼 class extends 一個抽象類別,不實作其行為時僅需要在 class 前面加註 abstract 即可通過編譯?

6. 為什麼一個 interface 可以繼承另一個 interface,卻不能繼承一個 abstract class ?


--------------------------------------------------------

以下是我自己筆記的一些看法

1. 一個 class 是可以看成是一個完整的個體,他可以獨立運作,有完整的行為定義與其行為方式,例如一台市售的摩托車

2. 一個 abstract class 是一個未完成的個體,不可獨立運作,其可能包含一些完整行為,但有些行為的實作方式不指定 ( 亦不確定 ),將其實做方式留給後續繼承的類別去決定。( 暫時想不到比較貼切的形容 XD )

3. 一個 interface 可以看成是一個介面或者協定,其僅定義有何種行為,但不實作其行為內容。例如電腦上的USB介面,只要確定電腦有USB介面就可以透過指定的方法進行傳輸。


如果對於這些有一定程度的理解

那下列的文章對一些觀念來說會有很大的幫助


參考資料:
封不封裝有差嗎?
https://openhome.cc/Gossip/JavaEssence/Encapsulation.html

這是哪種東西?
https://openhome.cc/Gossip/JavaEssence/Inheritance.html

到底哪裡抽象了?
https://openhome.cc/Gossip/JavaEssence/AbstractClass.html

虛有其表的介面
https://openhome.cc/Gossip/JavaEssence/Interface.html

千面人
https://openhome.cc/Gossip/JavaEssence/Polymorphism.html









沒有留言:

張貼留言

Layout疑難雜症筆記

 這裡記錄一些Layout時View元件比較特殊的狀況與處理方式,內容會陸續增加。