не, я не имел в виду что интерфейс описывает какое-то действие (которое требуется смоделировать в коде), например алгоритм, а про поведение как вообще свойственное обьектам, что будет определять его тип, то есть просто реализацию методов
я о том, что переопределение метода в классе наследнике разве не нарушает субтипирование, если таким образом обьект, имея (включительно) тот же интерфейс (в общем смысле), что и обьекты класса предка, будет проявлять иное поведение при вызове методов, входящих в этот интерфейс
Блин, я сейчас понял, вот и моя ошибка - класс игрока в примере то абстрактный по идее, у него нет инстансов, реализация методов в нем - просто реализация по умолчанию, и множество значений игроков все равно сумма множеств возможных обьектов наследников этого класса, а у самого этого класса конфликтующих обьектов нет
Переопределять методы в подклассах можно. Но надо в уме всегда держать букву L из солида, а иначе да, можно легко нарушить субтипирование. Хоть язык и позволяет переопределить метод суперкласса на что то совершенно иное, это не значит что так нужно делать, потому что в итоге можно получить довольно странную архитектуру с наследованием где каждый подкласс не имеет ничего общего с суперклассом. Поэтому рассуждать на эту тему уж точно не будет вредно.