Подъём поля.
Два класса имеют одно и то же поле.
Переместите поле в суперкласс, убрав его из подклассов.
##Пример
class Employee {}
class Salesman extends Employee {
String name;
}
class Engineer extends Employee {
String name;
}class Employee {
String name;
}
class Salesman extends Employee {}
class Engineer extends Employee {}##Зачем делать рефакторинг
Подклассы развивались независимо друг от друга. Это привело к созданию одинаковых (или очень похожих) полей и методов.
##Преимущества
-
Убивает дублирование полей в подклассах.
-
Облегчает дальнейший перенос дублирующих методов из подклассов в суперкласс, если они есть.
##Как делать рефакторинг
-
Проверьте, что оба поля используются для одинаковых нужд в подклассах.
-
Если поля имеют разные названия, дайте им общее имя и замените все обращения к полям в существующем коде.
-
Создайте поле с таким же именем в суперклассе. Обратите внимание на то, что если поля были приватные (private), поле в суперклассе должно быть защищённым (protected).
-
Удалите поля из подклассов.
-
Возможно, имеет смысл использовать самоинкапсуляцию поля для нового поля, чтобы скрыть его за методами доступа.