Предположим, у меня есть абстрактный класс вроде:
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 является подтипом T, тогда объекты типа T могут быть заменены объектами типа S [...] без изменения каких-либо желаемых свойств этого программа (правильность, задача выполнена и т. д.).