Я бы сказал, что если у вас есть кодовая база, с которой вы хотите это сделать, это не самая лучшая кодовая база. Обычно это признак того, что классу одного уровня иерархии требуется определенная публичная подпись, в то время как другому классу, производному от этого класса, это не нужно.
Предстоящая парадигма кодирования называется «Композиция над наследованием». Это напрямую противоречит принципам объектно-ориентированной разработки (особенно принципу единой ответственности и принципу открытой / закрытой).
К сожалению, из-за того, что многие из нас, разработчиков, учились объектной ориентации, у нас сформировалась привычка немедленно думать о наследовании, а не о композиции. У нас, как правило, большие классы, на которые возложено много разных обязанностей просто потому, что они могут содержаться в одном и том же объекте «Реальный мир». Это может привести к иерархии классов более 5 уровней.
К сожалению, побочный эффект, о котором разработчики обычно не думают при работе с наследованием, заключается в том, что наследование является одной из самых сильных форм зависимостей, которые вы когда-либо можете ввести в свой код. Ваш производный класс теперь сильно зависит от класса, от которого он был унаследован. Это может сделать ваш код более хрупким в долгосрочной перспективе и привести к сложным проблемам, когда изменение определенного поведения в базовом классе нарушает производные классы непонятными способами.
Один из способов взломать ваш код - использовать интерфейсы, подобные упомянутым в другом ответе. В любом случае это разумно, так как вы хотите, чтобы внешние зависимости класса связывались с абстракциями, а не с конкретными / производными типами. Это позволяет вам изменять реализацию без изменения интерфейса, и все это без влияния на строку кода в вашем зависимом классе.
Я бы предпочел не поддерживать систему с сотнями / тысячами и даже большим количеством классов, которые все малы и слабо связаны, чем иметь дело с системой, которая интенсивно использует полиморфизм / наследование и имеет меньше классов, которые более тесно связаны ,
Возможно, лучший лучший ресурс по объектно-ориентированной разработке - это книга Роберта Мартина Agile Software Development, Принципы, Шаблоны и Практики .