Не понимаю, почему нет; у подклассов могут быть разные реализации IClass, они просто соответствуют спецификации IClass. У вас может быть другая реализация Class, которая не реализует IClass, поэтому нет смысла заставлять BaseClass реализовывать ее (или абстрагировать) и навязывать ее всем своим дочерним элементам.
Это скорее дизайнерские решения, чем жесткие и быстрые правила, и они во многом зависят от пространства объектов, которое вы моделируете. Если что-то общее для всего класса, подумайте о том, чтобы сделать его частью базового класса. Если что-то является специализацией, которую демонстрируют только несколько Классов, сделайте это интерфейсом, чтобы к ним можно было относиться обычно для этой специализации
Предположим, вы создали набор коллекций (устройства хранения данных, такие как Очередь, Список и т. Д. - я выбираю их, потому что они обычно используются, понятны, и люди привыкли к тому, что они реализуют интерфейсы).
Вы решили, что все коллекции должны поддерживать добавление и удаление, но можно перечислить только некоторые из них. Add / Remove будут абстрактными методами базового класса, операции, связанные с перечислением, будут определены в интерфейсе. Не все конкретные подклассы базы реализуют интерфейс, и, следовательно, не все из них могут использоваться в других местах, которые объявляют «Я возьму все, что реализует перечисление»