Abstract class 通常會包含多個 abstract method,但也可以沒有 abstract method。沒有 abstract method 的 abstract class,通常代表該 class 不是 concrete class,希望使用 subclass 來 create instance。
比如我們有一個 Animal class,但在我們應用中,Animal 只是用來表明所有的動物的 superclass,Animal 並沒定義有 abstract method,此時我們仍會將 Animal 標注為 abstract class。
所以 abstract class 主要是要看它是否代表抽象而言,而非以有無 abstract method 來斷定。當然有 abstract method 的 class 就一定是 abstract class。
在 Java 中,abstract class 需要在 class 前以 abstract modifier 註明該 class 是 abstract class。而 abstract method 也需要以 abstract modifier 註明該 method 是 abstract method。
範例
abstract class C { // 用 abstract 註明本 class 為 abstract class abstract void m1(); //用 abstract 註明本 method 為 abstract method }當有 subclass 繼承某個 abstract class 時,需要 implements 所有的 abstract method,否則表示該 subclass 仍有尚未 implement 的 abstract method,這時該 subclass 仍需宣告為 abstract class。
Scala 的 abstract class 的概念與 Java 的類似。也是使用 abstract 宣告。
但有點不同之處,Scala 中不需特別宣告 abstract method,也不能宣告某個 method 為 abstract method。只要有某些 method 沒有定義,那些 method 自動會被 Scala 標示為 abstract method。
所謂 method 沒有定義的意思是,method 宣告後沒有對應的程式碼(即沒有使用等號,或 method 後面沒有使用大括號括住的程式碼),就是 method 沒有定義。
範例
abstract class S { // 用 abstract 註明本 class 為 abstract class def p: String // 宣告一個 method p,但沒有定義,所以 p 是 abstract method } val s = new S // 這是錯誤的,因為 abstract class 不能 create instance
沒有留言:
張貼留言