抽象類別與抽象函式
- 為了建立讓子型別都可用的共同介面,可以讓base class成為一個abstract class。
- 只有宣告而無本體的method稱為abstract method。(相當於C++的pure virtual function)
abstract void f(); |
- 含有一個或多個abstract method的class需以關鍵字abstract做為此class的飾詞。
- 不能產生abstract class的物件,因為他只是用來表示介面。
- 繼承abstract class的話必須實做所有abstract method才能產生物件,若沒有實作所有abstract method,此class仍然要加abstract做為abstract class。
- 若只是單純不希望某個class被產生出物件,也可以將沒有abstract method的class變為abstract class。
介面
- interface可以想像成是"純粹"的abstract class。
- interface內的data member都預設為public final static。
- interface內的method都只能是宣告,而且預設為public。
- 可以透過繼承來擴充interface,但繼承它的也要是一個interface。
- 只有對interface允許extends後面接一個以上的interface。
interface vs. abstract class
- interface的好處
- 能被向上轉型到多個base class (多重繼承時)
- 和abstract class一樣使其無法產生物件
- 若不帶任何函式定義及成員變數,應該優先選擇使用interface。
沒有留言:
張貼留言