Subir el cuerpo del constructor.
Tus subclases tienen constructores con código que es casi idéntico.
Crea un constructor en la superclase y traslada a él el código que es igual en las subclases. Llama al constructor de la superclase desde los constructores de las subclases.
##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
¿En qué se diferencia esta técnica de refactorización de Subir método?
-
En Java, las subclases no pueden heredar un constructor, así que no puedes simplemente aplicar Subir método al constructor de la subclase y eliminarlo tras haber trasladado todo el código del constructor a la superclase. Además de crear un constructor en la superclase, es necesario tener constructores en las subclases con una simple delegación al constructor de la superclase.
-
En C++ y Java (si no llamaste explícitamente al constructor de la superclase), el constructor de la superclase se llama automáticamente antes que el de la subclase, lo que obliga a mover el código común únicamente desde el principio de los constructores de las subclases (ya que no podrás llamar al constructor de la superclase desde un punto arbitrario de un constructor de subclase).
-
En la mayoría de los lenguajes de programación, un constructor de subclase puede tener su propia lista de parámetros distinta de la de la superclase. Por tanto, deberías crear un constructor en la superclase solo con los parámetros que realmente necesita.
##How to Refactor
-
Crea un constructor en una superclase.
-
Extrae el código común del principio del constructor de cada subclase al constructor de la superclase. Antes de hacerlo, intenta mover al principio del constructor todo el código común que puedas.
-
Coloca la llamada al constructor de la superclase en la primera línea de los constructores de las subclases.