https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%91%D0%B0%D1%80%D0%B1%D0%B0%D1%80%D1%8B_%D0%9B%D0%B8%D1%81%D0%BA%D0%BE%D0%B2 Мы можем иметь тип A и добавлять к нему свойство B, образуя подтип AB. Мы, так же, можем иметь тип AB, то есть, A со свойством B, и в некоторых местах требовать отсутствия свойства B.
Квадрат и прямоугольник тому свидетели: прямоугольник добавляет второе измерение к квадрату (прямоугольник расширяет квадрат), квадрат ограничивает одно из измерений прямоугольника (квадрат расширяет ограничением прямоугольник, как это ни странно).
Классы типов, они же интерфейсы, ортогональны и однозначны - здесь мы требуем один набор, здесь другой, один интерфейс может требовать реализации другого интерфейса.
Вышеуказанное означает, что от наследования надо держаться как можно дальше. Ведь неоднозначность означает использование "здравого смысла", который здравый смысл прикрепят к окружению заклёпками толщиной в мою ногу, и ты потом ничего с этим сделать не можешь.