kotlin エラー「error: this type is final, so it cannot be inherited from」の解決方法

kotlin エラー「error: this type is final, so it cannot be inherited from」の解決方法

kotlinで、エラー「error: this type is final, so it cannot be inherited from」の解決方法を記述してます。「open」を使用してないクラスから継承しようとした場合に発生します。

環境

  • OS windows11 home
  • java 17.0.2
  • kotlin 1.6.10-release-923

エラー全文

以下のコードで発生。

class Hoge() {

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

}

class Foo() : Hoge() {

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

}

fun main(){

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

エラーメッセージ

hello.kt:9:15: error: this type is final, so it cannot be inherited from
class Foo() : Hoge() {

原因

親クラスに「open」を使用せずに、継承しようとしているため

対処法

親クラスに「open」を使用する

open class Hoge() {

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

}

class Foo() : Hoge() {

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

}

fun main(){

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

}