This type is final so it cannot be inherited
は継承しようとしたクラスが継承できない(final
)ですよとの意味。
Kotlinではクラスのデフォルトでfinal
であるため、明示的にopen
を宣言して継承できるようにする。
Javaよりも厳格になっているようです。
open
継承できない例
// デフォルトでfinal
class Base {
open fun v() {}
fun nv() {}
}
class Derived() : Base() { // This type is final, so it cannot be inherited
override fun v() {}
}
open
を付けて継承できように宣言します。
open class Base {
open fun v() {}
fun nv() {}
}
class Derived() : Base() { // OK
override fun v() {} // 関数はoverride
}
override
上の例のように関数もオーバーライドするためにはopen
が必要です。
ちなみに、オーバーライドした関数はopen
であり、再度オーバーライドできます。
open class AnotherDerived() : Base() {
final override fun v() {}
}
final
をつけると再度オーバーライドできません。
参考
Kotlinをはじめて触るので理解を深めるため、エラーのメモを残していく。
【TypeScript】Jestでdescribeなどの関数がnot findになってるのを解消する
TypeScriptテストエラー解消schedule2021-10-10
【TypeScript】JestでインポートしたモジュールがCannot find moduleとなるエラー
TypeScriptテストエラー解消schedule2021-10-10
【Kotlin】桁区切りと小数桁数を指定できるフォーマッター
Kotlinschedule2019-09-11
【Android Studio】java.lang.RuntimeException java.lang.AssertionError:Already disposed Module:'my-app'
【Kotlin】範囲判定の in start..end で実数を使えるか?
Kotlinschedule2019-06-28