То, что вы не можете создать экземпляр определенного класса, не означает, что вы не можете его использовать. В этом сценарии вызывающий код использует абстрактный базовый класс в качестве определения договора, в соответствии с которым он работает. В этом смысле каждый класс, производный от базового класса, должен быть взаимозаменяемым по отношению к интерфейсу, определенному базовым классом, так что да, Лисков все еще применяется. Фактически, это одна из основных причин, по которой вы хотели бы иметь абстрактный базовый класс для коллекции классов, которые имеют некоторое общее поведение - поэтому вы можете определять операции в терминах интерфейса базового класса, а не заботиться о том, какой производный класс вы на самом деле оперируете.