はじめに 自分が書いてないコードで色々辛い思いをしてきたので、どういう場合に継承が破綻するのか調べてみました。 この記事でわかるであろうこと * 継承を(破綻しないように)ちゃんと用いるにはリスコフの置換原則と契約による設計の理解が必要なこと リスコフの置換原則とは リスコフの置換原則とは、一言でいうと「派生型(サブクラス)はその基底型(スーパークラス)と置換可能でなければならない」という原則です。 * リスコフの置換原則を守らないと必然的に開放/閉鎖原則に違反するため、リスコフの置換原則を守ることは重要です。 下記のコードはSquare(正方形)がRectangle(長方形)を継承しています。つまり、派生型がSquare、基底型がRectangleです。 正方形は長方形を特化したもの(見た感じではis-a関係が成立している)と言えるので継承を使うことは一見正しそうに見えます。 「派生型は