--- tags: Java, Abstract, Interface --- # Java Advanced: ## :memo: todo list 1. Review inheritance 2. Abstract 3. Interface *前情提要: 本章節絕對難懂,抽象和介面就像他的名稱一樣很抽象. 這些概念會在大型專案及設計模式中(Design Pattern)被使用到。 初學程式只需要搞懂繼承就很足夠了,未來如果有機會接觸到大型專案會再重新複習一次,目前聽不懂沒關係,大概知道是什麼意思就好。* ### 1. Review inheritance https://hackmd.io/Kiv76jeTQninqOLUZK0fOw ### 2. Abstract 抽象就像是設計稿 abstract關鍵字,用於類別和方法 : **Abstract Class**:是一個受限制的類別,不能用於創建物件(要使用它的內部成員,必須由另一個類別繼承)。 **Abstract Function**:只能在Abstract Class中使用,它沒有方法內容。內容皆由子類別(繼承的類別)來定義。 **為什麼以及何時使用抽像類別和抽象方法?** 實現安全性 - 隱藏某些細節並僅顯示物件的重要細節。 **程式範例:** https://github.com/hryjosn/java_class_tutorial/tree/main/Tutorial_class/src/abstractExample 舉例: ```假設你今天要做個遊戲,那麼為了遊戲需要而生成的對象(不是管理系統,就是遊戲層別的那種,比如魔王和小怪),這些對象他們可能都會有個共通點,比如魔王和主角和小怪他們可能都需要被畫出來,也有可能都需要被調查他們的屬性,換句話說,他們有共通點但實作方法又不同,就可以用抽象類別來規範。``` 參考:https://www.mobile01.com/topicdetail.php?f=512&t=2971459 ### 3. Interface(介面) 可以把Interface 想像成是一個完全的抽象類別,雖然他可以定義資料成員(String, int....),但他的function 都必須是abstract,也就是說他的所有function都必須被覆寫. Interface Class有幾個特點: * 和Abstract一樣,不能被用於創建物件 * 可以實現多重繼承(但關鍵字必須用implements,使用逗點隔開多個介面) * 介面的function被預設是 public 且 abstract * 介面不能有建構元 **程式範例:** https://github.com/hryjosn/java_class_tutorial/blob/main/Tutorial_class/src/InterfaceExample/Main.java 比較: **抽象與介面作比較,明顯可以看到抽象類別不止可以實現抽象方法,更可以包含商業邏輯與私人屬性。** 介面與抽象類別在 OO 中有著重要的作用,可以降低程式的耦合與重複,增加彈性 練習題: ![](https://i.imgur.com/mkiKkKt.jpg) *Java 不能多繼承類別,但可以實作多個介面(類似多繼承),但C語言可以多繼承* *多繼承會發生鑽石問題,有興趣可以參考此篇文章:* https://www.itread01.com/content/1550618849.html