Suppose I have an abstract class like:
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进行不同的处理。我的问题是,这是否违反了Liskov替换原则,该原则规定:
[...]在计算机程序中,如果S是T的子类型,则可以用S类型的对象替换T类型的对象,而不会改变该程序的任何可取属性(正确性,执行任务等)。