Kotlin には、data class という機能がある。equals や toString などいくつかのメソッドを自動的に実装してくれるので、いわゆる値オブジェクトなんかを定義するのに便利な機能である。
ある日ふと思ったのが、親クラスで定義した toString を使い回せないかということ。というのも、他のクラスを継承して data class を定義した場合、親クラスで toString などのメソッドがどのように定義されていようとも、無視して強制的にデフォルト実装が自動的に定義されるようなのである。
答えとしてはドキュメントを読めば書いてあって、親クラスで final 修飾付きで定義しておけば、継承したときに自動的に上書きされることはなくなる。
その他の例も含めているので少し長くなっているが、DerivedDataClass が普通にやって toString が上書きされた例で、DerivedDataClassFinalToString が final をつけて上書きを防いだ例。