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