J’apprends actuellement l’inheritance des classes dans mon cours Java et je ne comprends pas quand utiliser l’appel super()
?
Modifier:
J’ai trouvé cet exemple de code où super. variable
super. variable
est utilisée:
class A { int k = 10; } class Test extends A { public void m() { System.out.println(super.k); } }
Donc, je comprends qu’ici, vous devez utiliser super
pour accéder à la variable k
dans la super-classe. Cependant, dans tous les autres cas, qu’est-ce que super();
faire? Seul
Appeler exactement super()
est toujours redondant. Il fait explicitement ce qui serait implicitement fait autrement. En effet, si vous omettez un appel au super constructeur, le super constructeur sans argument sera invoqué automatiquement de toute façon. Pour ne pas dire que c’est du mauvais style; certaines personnes aiment être explicites.
Cependant, lorsque cela devient utile, le super constructeur prend les arguments que vous souhaitez transmettre à partir de la sous-classe.
public class Animal { private final Ssortingng noise; protected Animal(Ssortingng noise) { this.noise = noise; } public void makeNoise() { System.out.println(noise); } } public class Pig extends Animal { public Pig() { super("Oink"); } }
super
est utilisé pour appeler le constructor
, les methods
et les properties
de la classe parente.
Vous pouvez également utiliser le mot super
clé super
dans la sous-classe lorsque vous souhaitez appeler une méthode à partir de la classe parent lorsque vous l’avez remplacée dans la sous-classe.
Exemple:
public class CellPhone { public void print() { System.out.println("I'm a cellphone"); } } public class TouchPhone extends CellPhone { @Override public void print() { super.print(); System.out.println("I'm a touch screen cellphone"); } public static void main (ssortingngs[] args) { TouchPhone p = new TouchPhone(); p.print(); } }
Ici, la ligne super.print()
appelle la méthode print()
de la superclasse CellPhone
. Le résultat sera:
I'm a cellphone I'm a touch screen cellphone
Lorsque vous voulez que le constructeur de la super classe soit appelé – pour initialiser les champs qu’il contient. Jetez un oeil à cet article pour savoir quand l’utiliser:
http://download.oracle.com/javase/tutorial/java/IandI/super.html
Vous l’utiliseriez comme première ligne d’un constructeur de sous-classe pour appeler le constructeur de sa classe parente.
Par exemple:
public class TheSuper{ public TheSuper(){ eatCake(); } } public class TheSub extends TheSuper{ public TheSub(){ super(); eatMoreCake(); } }
Construire une instance de TheSub
appellerait à la fois eatCake()
et eatMoreCake()
Vous pouvez l’utiliser pour appeler la méthode d’une super-classe (par exemple lorsque vous écrasez une telle méthode, super.foo (), etc.) – cela vous permettra de conserver cette fonctionnalité et de l’append à tout ce que vous avez dans le remplacement méthode.
Super appellera votre méthode parente. Voir: http://leepoint.net/notes-java/oop/constructors/constructor-super.html
Vous appelez super()
pour lancer spécifiquement un constructeur de votre superclasse. Étant donné qu’une classe peut avoir plusieurs constructeurs, vous pouvez appeler un constructeur spécifique en utilisant super()
ou super(param,param)
ou vous pouvez laisser Java gérer cela et appeler le constructeur standard. Rappelez-vous que les classes qui suivent une hiérarchie de classes suivent la relation “is-a”.
La première ligne du constructeur de votre sous-classe doit être un appel à super()
pour vous assurer que le constructeur de la super-classe est appelé.
Je viens de l’essayer, commentant super (); fait la même chose sans le commenter comme l’a dit @Mark Peters
package javaapplication6; /** * * @author sborusu */ public class Super_Test { Super_Test(){ System.out.println("This is super class, no object is created"); } } class Super_sub extends Super_Test{ Super_sub(){ super(); System.out.println("This is sub class, object is created"); } public static void main(Ssortingng args[]){ new Super_sub(); } }
De la page de documentation d’Oracle:
Si votre méthode remplace l’une des méthodes de sa superclasse, vous pouvez appeler la méthode redéfinie en utilisant le mot clé
super
.
Vous pouvez également utiliser super
pour faire référence à un champ caché (bien que le masquage des champs soit déconseillé).
Utilisation de super
en constructeur de sous-classes:
L’appel d’un constructeur de superclasse doit être la première ligne du constructeur de sous-classe.
La syntaxe pour appeler un constructeur de superclasse est
super();
ou:
super(parameter list);
Avec super()
, le constructeur sans argument superclasse est appelé. Avec super(parameter list)
, le constructeur de la superclasse avec une liste de parameters correspondante est appelé.
Remarque: Si un constructeur n’appelle pas explicitement un constructeur de super-classe, le compilateur Java insère automatiquement un appel au constructeur sans argument de la super-classe . Si la classe super n’a pas de constructeur sans argument, vous obtiendrez une erreur à la compilation.
Article similaire:
Polymorphisme vs Dérogation ou surcharge