在第12天的文章"無處不見的修飾符(modifier)"中,有提到abstract這個修飾符,但當初只是簡單帶過。今天將更為詳細的說明它的概念,馬上進入正題吧。
抽象類別(Abstract Class) 是什麼
abstract翻譯成抽象,它可以當作Class和method的修飾符,而abstract method只能在同為abstract的class中使用。"抽象"這個名詞其實就是"不完全具體化"的東西,也就是說,我們是在定義一個「概念」,而不是具體的「行動」。因此抽象類別中的方法只有定義,而不包含實際操作。所以,當有類別要繼承抽象類別時,必須要override其中的所有抽象方法。
補充說明一點:抽象類別中除了抽象方法,也允許非抽象方法存在。
舉一個生活化的例子:
每個手機品牌都有不同的功能,比如有的手機拍照功能強;有的手機電池耐用。但有些功能是所有手機都會有的,比如開機、關機、打電話。這些功能,不管手機品牌為何,都是一樣的。
在 Java 裡,抽象類別(Abstract Class) 就像是一個「手機模板」,定義了所有手機都會有的基本功能,但具體的功能實現會留給不同的手機品牌來決定。
再來,abstract Class是不允許實例化物件的,它只能作為一種data type用來做多形應用。既然抽象類別不能實例化,那麼它的構造函數目的是什麼呢?
答案是,它可以透過繼承它的子類別的super( )關鍵字來呼叫其構造函數,其實有點拐一個彎來操作的感覺。
寫完有一種頭昏腦脹的感覺,抽象真的有點難懂...