Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git! Привет! Глянь мой новый курс по Git на GitByBit.com! Привет! Хочешь круто подтянуть Git? Глянь мой новый курс на GitByBit.com!

Отказ от наследства

Также известен как: Refused Bequest

Симптомы и признаки

Если подкласс использует лишь малую часть унаследованных методов и свойств суперкласса, это является признаком неправильной иерархии. При этом ненужные методы могут просто не использоваться либо быть переопределёнными и выбрасывать исключения.

Причины появления

Кто-то создал наследование между классами только из побуждений повторного использования кода, находящегося в суперклассе. При этом суперкласс и подкласс могут являться совершенно различными сущностями.

Лечение

  • Если наследование не имеет смысла, и подкласс в действительности не является представителем суперкласса, следует избавиться от отношения наследования между этими классами, применив замену наследования делегированием.

  • Если наследование имеет смысл, нужно избавиться от лишних полей и методов в подклассе. Для этого необходимо извлечь из родительского класса все поля и методы, которые нужны подклассу, в новый суперкласс, и сделать оба класса его наследниками (извлечение суперкласса).

Выигрыш

  • Улучшает понимание и организацию кода. Теперь вы не будете тратить время на догадки о том, почему класс Стул унаследован от класса Животное (несмотря на то, что оба имеют четыре ноги).