假设我有一个抽象类,例如:
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 类型的对象替换 [...]而不会改变该程序的任何期望属性(正确性,执行的任务), ETC。)。