Remonter le corps du constructeur.
Vos sous-classes ont des constructeurs dont le code est en grande partie identique.
Créez un constructeur dans la superclasse et déplacez-y le code commun aux sous-classes. Appelez le constructeur de la superclasse dans les constructeurs des sous-classes.
##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 quoi cette technique de refactorisation diffère-t-elle de Remonter une méthode ?
-
En Java, les sous-classes ne peuvent pas hériter d'un constructeur ; vous ne pouvez donc pas simplement appliquer Remonter une méthode au constructeur de la sous-classe puis le supprimer après avoir remonté tout le code du constructeur vers la superclasse. En plus de créer un constructeur dans la superclasse, il est nécessaire d'avoir dans les sous-classes des constructeurs qui se contentent de déléguer au constructeur de la superclasse.
-
En C++ et en Java (si vous n'avez pas appelé explicitement le constructeur de la superclasse), le constructeur de la superclasse est automatiquement appelé avant celui de la sous-classe, ce qui oblige à ne déplacer le code commun que depuis le début des constructeurs des sous-classes (puisque vous ne pourrez pas appeler le constructeur de la superclasse depuis un endroit arbitraire d'un constructeur de sous-classe).
-
Dans la plupart des langages de programmation, un constructeur de sous-classe peut avoir sa propre liste de paramètres, différente de celle de la superclasse. Vous ne devriez donc créer le constructeur de la superclasse qu'avec les paramètres dont il a réellement besoin.
##How to Refactor
-
Créez un constructeur dans une superclasse.
-
Extrayez le code commun du début du constructeur de chaque sous-classe vers le constructeur de la superclasse. Auparavant, essayez de déplacer autant de code commun que possible au début du constructeur.
-
Placez l'appel au constructeur de la superclasse sur la première ligne des constructeurs des sous-classes.