Недостатки наследования:
1) Скорость выполнения
Программные инструменты общего назначения редко являются такими же быстрыми, как и аккуратно, "вручную" разработанные специальные системы. То есть, унаследованные методы, имеющие дело с подклассами, часто медленнее специального кода.
Но заботы об эффективности часто бывают не к месту. Билл Вульф считает, что "Во имя эффективности (как правило, эфемерной) совершается больше программных ошибок, чем по какой-либо другой причине, включая полную тупость".
Во-первых, разница не слишком велика.
Во-вторых, снижение скорости выполнения может компенсироваться повышением скорости разработки программного обеспечения.
Наконец, большинство программистов на самом деле мало знают о том, как распределены временные затраты в программах.
Поэтому гораздо лучше создать работающую систему, произвести замеры времени, чтобы обнаружить, на что же, собственно, оно тратится, и улучшить эти части, чем затратить уйму времени, заботясь об эффективности на ранних стадиях проекта.
2) Размер программ
Использование любой программной библиотеки часто приводит к увеличению размера программ. Этого не происходит в специально разработанных системах. Хотя такие затраты могут быть существенными, по мере уменьшения стоимости памяти размер программы перестает быть критичным. Снизить затраты на разработку и быстро выдать качественный и свободный от ошибок программный код иногда значит гораздо больше, чем малый размер приложения.
3) Сложность программ
Необдуманное использование наследования может вместо разрешения проблемы сложности подействовать наоборот. Для понимания программы, использующей наследование, может потребоваться несколько сложных переходов вверх и вниз в иерархическом дереве.