Java – étendre une classe et réutiliser les méthodes?

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.

  • Mais un endroit où nous devons faire un remplacement est, disons, que vous avez surchargé votre constructeur par défaut de la super classe, puis que dans la sous-classe vous devez mentionner l’appel du constructeur de la super-classe surchargée comme première ligne de votre sous-classe constructeur (c’est-à-dire que l’object super-classe doit être créé avant la création de la sous-classe). Par exemple

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