kotlin エラー「error: ‘x’ in ‘xxx’ is final and cannot be overridden」の解決方法

kotlin エラー「error: ‘x’ in ‘xxx’ is final and cannot be overridden」の解決方法

kotlinで、エラー「error: ‘x’ in ‘xxx’ is final and cannot be overridden」の解決方法を記述してます。「open」を使わずにオーバーライドした際などに発生します。

環境

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

エラー全文

以下のコードで発生。

open class Hoge() {

    open fun f() { println("hello") }
    fun m() { println("world") }

}

class Foo() : Hoge() {

    override fun f() { println("こんにちわ") }
    override fun m() { println("せかい") }

}

fun main(){

    val foo = Foo()
    foo.f()

}

エラーメッセージ

error: 'm' in 'Hoge' is final and cannot be overridden
    override fun m() { println("せかい") }
    ^

原因

「open」を使用せずに、メソッドをオーバーライドしようとしているため

対処法

「open」を使用する

open class Hoge() {

    open fun f() { println("hello") }
    open fun m() { println("world") }

}

class Foo() : Hoge() {

    override fun f() { println("こんにちわ") }
    override fun m() { println("せかい") }

}

fun main(){

    val foo = Foo()
    foo.m() // せかい

}