Effective Java 第4章 クラスとインタフェース (17)

約1週間ぶりになってしまった…… この調子で続けてこの本とあと2冊を4月までに読み終わるのかなあ?
この本、いいことばかり書いてあるんだけど文章が読みにくくてちょっと苦手。翻訳だからしょうがないのかもしれないけど。

項目17

とにかく継承は禁止だーって書いてある。どうしても継承させたいなら、継承のための設計と文書化をしなさいとのこと。


文書化に関して、オーバーライド可能な全てのメソッドに対してどういう順番で呼び出しするか、呼び出し後にどういう影響があるか、というのを記述する。
オーバーライド可能な全てのメソッドは、staticなメソッドから呼ばれたり、後ろで動いてるスレッドから呼ばれたりなどする可能性があるので、そういうことも書いてあげないとよろしくないとかなんとか。


他に、コンストラクタ内でオーバーライド可能なメソッドを呼んではいけないことや、クラスのテストにはサブクラスを作ってテストするなど。
サブクラスはだいたい3つ、1つは自分で、残りの2つは誰かに書いてもらうといいとか。
スーパークラスを修正した後に、サブクラスにバグが発生したりなんてこともままあったりとか。


…などなど、これらの理由で継承は面倒なので禁止しましょうとのこと。
でも言語の機能として使える上に、入門書でも継承のやり方がよく書いてある訳で、よほど説得力と腕のある人が言わないと誰も守らないような気がする。