クラスを持つと書かれている本があり、それから を継承PhoneNumber
するクラスを定義します。私はかつて、アドレスは電話番号ではないため、継承することはできないと言いました。それは「である」関係でなければなりません。たとえば、犬は動物であり、から継承させることができます。Address
PhoneNumber
Dog
Animal
しかし、LSP -- Liskov Substitution Principleに従わなければならないので、正方形は "is a" 長方形 (幅 == 高さ) であるため、"is a" ルールは実際には決定要因ではありませんが、LSP はできると言います。クラスを定義し、そのSquare
クラスから継承しRectangle
ます。aRect
英語での簡単な説明は、オブジェクトはメッセージsetWidthAndHeight(w, h)
に応答できますが、aSquare
正しく応答できず、プログラム全体が正しく実行できないということだと思います。
驚くべきことに、Address
クラスを継承するPhoneNumber
クラスは「is a」の関係に違反していますが、LSP には違反していません。正式には、どの OOP 原則に違反していますか?