# 抽象類別與抽象方法 What is abstract? ###### tags: `java` `abstract` `method` `decorator` `modifier` `tutorials` * ### 抽象方法:只要沒有實作,就是抽象方法。 eg. public abstract domethod( ); :::info **示意圖:** ![](https://i.imgur.com/iN86kCU.png) ::: :::warning 💡 方法只有( )卻沒有後面實作的{ },這樣就是抽象方法! ::: <br/> * ### 抽象類別: * ==只要類別內有抽象方法,就一定是抽象類別。== 抽象類別必須標示abstract,表示這個類別定義不完整,而定義不完整的類別就不能用來產生instance。 一旦用抽象類別建構instance,就會引發編譯錯誤。 * ==**但抽象類別不一定有抽象方法。**== 而為什麼沒有抽象方法卻還要設成抽象類別呢? 是因為抽象類別不能被new成物件 所以當你有某個Class不想被new成物件,不想被拿去用時,可以把那個Class設成abstract :::info 如圖所示: 抽象類別中不一定有抽象方法。 ![](https://i.imgur.com/tmti1CM.png) ::: <br/> :::warning 💡 抽象類別的重點在於繼承。 💡 抽象方法的重點在於實作,多個子類別可以依據各自的需求實作。 一旦標示abstract,就不會載入記憶體,也就無法被產生instance,只能透過override(覆寫)來實踐。 ::: <hr/> <br/> * ### 抽象類別與繼承的關係 :::warning 💡 心智圖可放大縮小,也可以移動 ::: ```markmap # 父類別是抽象類別 ### 父類別中有抽象方法 ##### 子類別必須實作父類別中的抽象方法 ###### 實作後的子類別就不是抽象類別,可以用來產生instance ##### 子類別不想實作,所以也變成抽象類別 ###### 抽象類別不能用來產生instance ### 父類別中沒有抽象方法 ##### 子類別不要求實作 ```