2
Liskovの置換の原則:サブタイプに、型には存在しない追加の動作が実装されている場合、このLSPの違反ですか?
私はより良く、よりクリーンなコードを書くために、SOLIDの原則について学んでいます。この点で、LSPは適切に把握するのが少し難しいことがわかっています。 私の疑問は、サブタイプSに余分なメソッドがあり、タイプTになかった場合、これは常にLSPの違反になるのでしょうか?はいの場合、どのようにextend私のクラスを行うのですか? たとえば、Birdタイプがあるとしましょう。そして、そのサブタイプはEagleおよびHumming Birdです。現在、両方のサブタイプには、としていくつかの共通の動作がありBirdます。しかし、Eagle(一般的なBirdタイプには存在しない)優れた略奪行動もあるので、それを使用したい。したがって、今はこれを行うことができません: Bird bird = new Eagle(); それで、Eagleそれらの追加の振る舞いを与えることはLSPを壊していますか? はいの場合、それはLSP違反を引き起こすため、クラスを拡張できないことを意味しますか? class Eagle extends Bird { //we are extending Bird since Eagle has some extra behavior also } クラスの拡張は、Open / Closed原則に従って許可する必要がありますか? よろしくお願いします!はっきりとわかるように、LSPは私を他のものと同じように混乱させています。 編集:このSOの回答を参照してください。この場合Carも、のような追加の動作がある場合ChangeGear、LSPに違反します。では、LSPに違反せずにクラスを拡張するにはどうすればよいでしょうか。