【发布时间】:2011-09-09 12:45:08
【问题描述】:
假设我有一个抽象类,例如:
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; }
}
我的程序将根据是否设置了特殊处理标志来区别对待Pets。我的问题是这是否算作违反了 Liskov 替换原则,该原则指出:
[...] 在计算机程序中,如果 S 是 T 的子类型,那么 T 类型的对象可以被 S 类型的对象替换 [...] 而不改变它的任何所需属性程序(正确性、执行的任务等)。
【问题讨论】:
标签: java oop liskov-substitution-principle