次のような抽象クラスがあるとします。
public abstract class Pet {
private final String name;
public Pet(String name) {
this.name = name
};
public abstract boolean getsSpecialTreatment();
}
public final class Dog extends Pet {
@Override public boolean getsSpecialTreatment() { return true; }
}
public final class Cat extends Pet {
@Override public boolean getsSpecialTreatment() { return false; }
}
私のプログラムはPet
、特別な処理フラグが設定されているかどうかに応じて、 s を異なる方法で扱います。私の質問は、これが次のように述べている Liskov 置換原則に違反していると見なされるかどうかです。
[...]コンピュータプログラムでは、SがTのサブタイプである場合、タイプTのオブジェクトはタイプSのオブジェクトに置き換えることができます[...]そのプログラムの望ましいプロパティ(正確さ、実行されるタスク)を変更することなくなど)。