kotlin クラスを継承する

kotlin クラスを継承する

kotlinで、クラスを継承する手順を記述してます。ここでは、実際にクラスを継承してオーバーライドしたサンプルコードを記述してます。

環境

  • OS windows11 home
  • java 19.0.1
  • kotlin 1.7.20-release-201

手順

クラスを継承するには、以下の構文で可能です。

// 親クラス
open class クラス名(変数名 : データ型){

}

// 子クラス
class クラス名(変数名 : データ型) : 親クラス(引数) {
    
}

実際に、クラスを継承してオーバーライドしてみます。

open class Hoge() {

    open fun f() { println("Hoge") }

    fun nf() {}

}

class Foo() : Hoge() {

    override fun f() { println("Foo") }

}

fun main(){

    val hoge = Hoge()
    hoge.f() // Hoge

    val foo = Foo()
    foo.f() // Foo

}

オーバーライドされていることが確認できます。

「open」を使用せずに、継承するとエラーとなります。

class Hoge() {

    open fun f() { println("Hoge") }

    fun nf() {}

}

// error: this type is final, so it cannot be inherited from

class Foo() : Hoge() {

    override fun f() { println("Foo") }

}

fun main(){

    val hoge = Hoge()
    hoge.f()

    val foo = Foo()
    foo.f()
}

オーバーライドも「open」がないと、エラーが発生します。

open class Hoge() {

    open fun f() { println("Hoge") }

    fun nf() {}

}

class Foo() : Hoge() {

    override fun f() { println("Foo") }
    override fun nf() { println("Foo") }

}

// error: 'nf' in 'Hoge' is final and cannot be overridden
// override fun nf() { println("Foo") }

fun main(){

    val hoge = Hoge()
    hoge.f()

    val foo = Foo()
    foo.f()
}