Подъём поля
Проблема
Два класса имеют одно и то же поле.
Решение
Переместите поле в суперкласс, убрав его из подклассов.
![Pull Up Field - Before](/images/refactoring/diagrams/Pull Up Field - Before.png?id=8174b96aa69ce1541271a14b97cc3e33)
![Pull Up Field - After](/images/refactoring/diagrams/Pull Up Field - After.png?id=c97f930072aba9f00c03ba140797de19)
Причины рефакторинга
Подклассы развивались независимо друг от друга. Это привело к созданию одинаковых (или очень похожих) полей и методов.
Достоинства
-
Убивает дублирование полей в подклассах.
-
Облегчает дальнейший перенос дублирующих методов из подклассов в суперкласс, если они есть.
Порядок рефакторинга
-
Проверьте, что оба поля используются для одинаковых нужд в подклассах.
-
Если поля имеют разные названия, дайте им общее имя и замените все обращения к полям в существующем коде.
-
Создайте поле с таким же именем в суперклассе. Обратите внимание на то, что если поля были приватные (private), поле в суперклассе должно быть защищённым (protected).
-
Удалите поля из подклассов.
-
Возможно, имеет смысл использовать самоинкапсуляцию поля для нового поля, чтобы скрыть его за методами доступа.