クラスの定義時点では実装を持たず、サブクラスで実装されるようなメソッドやフィールドを抽象メンバーと呼ぶ。また、抽象メンバーを1つ以上持つクラスを抽象クラスと呼ぶ。
Scala では、抽象クラスは abstract キーワードをつけて定義する。そして、抽象メンバーの定義は、メソッドやフィールドの本体部分がない形とする。
以下に、抽象フィールド mes を持つ抽象クラス Hoge を見よう。
scala> abstract class Hoge { | val mes: String | def shout(): Unit = println(mes + "!!!!") | } defined class Hoge
そしてこの mes に実装を与えるのは、Hoge を継承したサブクラス Fuga だ。
scala> class Fuga extends Hoge { | val mes: String = "Fuga" | } defined class Fuga
さて、じゃあ Fuga を使ってみよう。
scala> val fuga = new Fuga fuga: Fuga = Fuga@409c6c89 scala> fuga.shout Fuga!!!!
こんな感じだ。
そして最後に追加情報。クラス定義やインスタンスの生成時にも引数がなければカッコを省略できる。