Kotlin 抽象クラス

抽象クラス(abstract)

abstractは抽象クラスを定義する。抽象クラスは抽象関数と抽象プロパティを持つことができる。抽象メンバーを含めることができるが、そのままではインスタンス化できず、サブクラスで継承して抽象メソッドと抽象プロパティを実装してからインスタンス化する。つまり、サブクラスが実装すべきメソッドとプロパティの規則を定めるものが抽象クラスである。

次のGreeter抽象クラスには、抽象プロパティnameと抽象メソッドgreetがある。これらの抽象メンバーはシグネチャだけを持ち、実装されていないことが分かる。

例: 抽象クラスの例

abstract class Greeter {            // 抽象クラス
    abstract var name: String       // 抽象プロパティ
    abstract fun greet(): String    // 抽象関数
}

Greeterを継承するサブクラスを次に定義する。ここでは各抽象メンバーにoverrideキーワードを付けてオーバーライドしている。Kotlinではオーバーライドするときにoverrideキーワードが必須である。なお、abstractクラスはopenなしで継承できる。

例: 抽象クラスを継承したサブクラス

class Hello : Greeter() {                    // 抽象クラスを実装するサブクラス
    override var name: String = "devkuma"    // 抽象プロパティを実装
    override fun greet(): String = "Hello"   // 抽象関数を実装
}

それでは、上の抽象クラスを継承したサブクラスを実行してみよう。

例: クラスの実行

fun main() {
    var hello = Hello()
    println(hello.name)
    println(hello.greet())
}

Output:

devkuma
Hello