Subir Corpo de Construtor.
Suas subclasses têm construtores com código quase idêntico.
Crie um construtor na superclasse e mova para ele o código que é igual nas subclasses. Chame o construtor da superclasse nos construtores das subclasses.
##Example
class Manager extends Employee {
public Manager(String name, String id, int grade) {
this.name = name;
this.id = id;
this.grade = grade;
}
// ...
}class Manager extends Employee {
public Manager(String name, String id, int grade) {
super(name, id);
this.grade = grade;
}
// ...
}##Why Refactor
Em que essa técnica de refatoração difere de Subir Método?
-
Em Java, as subclasses não podem herdar um construtor, então você não pode simplesmente aplicar Subir Método ao construtor da subclasse e excluí-lo após mover todo o código do construtor para a superclasse. Além de criar um construtor na superclasse, é necessário ter construtores nas subclasses com simples delegação ao construtor da superclasse.
-
Em C++ e Java (se você não chamou explicitamente o construtor da superclasse), o construtor da superclasse é chamado automaticamente antes do construtor da subclasse, o que torna necessário mover o código comum apenas do início dos construtores das subclasses (já que você não conseguirá chamar o construtor da superclasse a partir de um ponto arbitrário de um construtor de subclasse).
-
Na maioria das linguagens de programação, um construtor de subclasse pode ter sua própria lista de parâmetros, diferente dos parâmetros da superclasse. Portanto, você deve criar um construtor de superclasse apenas com os parâmetros de que ele realmente precisa.
##How to Refactor
-
Crie um construtor em uma superclasse.
-
Extraia o código comum do início do construtor de cada subclasse para o construtor da superclasse. Antes de fazer isso, tente mover o máximo possível de código comum para o início do construtor.
-
Coloque a chamada ao construtor da superclasse na primeira linha dos construtores das subclasses.