Нарушают ли абстрактные свойства принцип подстановки Лискова?

Предположим, у меня есть абстрактный класс вроде:

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

8
задан Jake 6 June 2011 в 18:35
поделиться