継承はカプセル化を破壊する

で、継承をなぜ使ってはいけないかの具体的な理由がコレ。Effective Javaの項目14,15を参照。
簡単に言えば、calotocenがハマったように、overrideは継承元の実装に依存している。
だから、publicな(他のパッケージ(=実装者)から見れる)クラスのfinalでないメソッドは、その内部動作を詳細にドキュメンテーションし、バージョンアップしても実装を変更してはいけない。

で、Javaの標準APIは、言語の進化と共に進化してきたために、後から経験的に判明した「安全にJavaを使うためのルール」を満たしていない。継承してもいけないし、お手本にしてもいけない。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。