Отказ от наследства
Симптомы и признаки
Если подкласс использует лишь малую часть унаследованных методов и свойств суперкласса, это является признаком неправильной иерархии. При этом ненужные методы могут просто не использоваться либо быть переопределёнными и выбрасывать исключения.
Причины появления
Кто-то создал наследование между классами только из побуждений повторного использования кода, находящегося в суперклассе. При этом суперкласс и подкласс могут являться совершенно различными сущностями.
Лечение
-
Если наследование не имеет смысла, и подкласс в действительности не является представителем суперкласса, следует избавиться от отношения наследования между этими классами, применив замену наследования делегированием.
-
Если наследование имеет смысл, нужно избавиться от лишних полей и методов в подклассе. Для этого необходимо извлечь из родительского класса все поля и методы, которые нужны подклассу, в новый суперкласс, и сделать оба класса его наследниками (извлечение суперкласса).
Выигрыш
- Улучшает понимание и организацию кода. Теперь вы не будете тратить время на догадки о том, почему класс
Стул
унаследован от классаЖивотное
(несмотря на то, что оба имеют четыре ноги).