public class BaseClass { public void start() { // do something } } public class ClassA extends BaseClass { } ClassA c = new ClassA(); c.start();
Dans le code suivant, je souhaite utiliser la méthode start () telle qu’elle a été définie dans la super classe. J’ai constaté dans de nombreux codes de développeur qu’ils surchargent la méthode dans la super classe puis qu’ils appellent le super. Y at-il une raison à cela?
public class ClassA extends BaseClass { @Override public void start() { super.start(); } }
Clarté? Certains développeurs estiment qu’il est plus clair de montrer la méthode dans la sous-classe. Je ne suis pas d’accord. C’est une information redondante.
Au moins depuis Java 5, vous pouvez append un @Override pour que le compilateur vous dise si la signature change / disparaît.
Sauf pour les constructeurs. Pour les constructeurs, vous devez créer votre propre signature avec la même signature et déléguer à la hausse. Dans ce cas, omettre n’est pas équivalent cependant.
Remplacer une méthode, faire quelque chose de spécial, puis appeler super.method()
est appelé décorer une méthode – vous ajoutez au comportement. Lisez plus ici: Motif Décorateur .
Le remplacer sans appeler la méthode de super consiste simplement à remplacer une méthode – à changer le comportement.
public class ClassA extends BaseClass { @Override public void start() { super.start(); } }
fait exactement la même chose que ne pas écraser du tout comme ça
public class ClassA extends BaseClass {}
Donc, à moins que vous n’ayez des fonctionnalités supplémentaires à append (dans ce cas, vous appelez la méthode de la super classe et ajoutez ensuite votre logique supplémentaire) ou pour faire quelque chose de différent (vous n’appelez pas la méthode de la super classe et définissez simplement une logique différente), ne substituez pas la méthode de la super classe (et appelez la méthode de la super classe) car elle est inutile.
Je fais parfois cela (temporairement, pendant le développement) quand je veux y placer un sharepoint rupture.
La principale raison du concept d’inheritance est la généralisation des fonctions ou opérations communes aux sous-classes. Il est logique de remplacer uniquement lorsque nous devons personnaliser l’opération pour la sous-classe particulière.
classe BaseClass {
Classe de base (arg1) {
}
}
la classe A étend BaseClass {
A {super (arg1); }
}
A d’autres endroits, il ne ferait qu’append une redondance du code, ce qui n’est pas du tout nécessaire