J'apprends actuellement l'héritage de classe dans mon Java) cours et je ne comprends pas quand utiliser l'appel super()
?
Modifier:
J'ai trouvé cet exemple de code dans lequel super.variable
Est utilisé:
class A
{
int k = 10;
}
class Test extends A
{
public void m() {
System.out.println(super.k);
}
}
Je comprends donc que vous devez utiliser super
pour accéder à la variable k
de la super-classe. Cependant, dans les autres cas, que fait super();
? Seul?
Appeler exactement super()
est toujours redondant. C'est explicitement faire ce qui serait implicitement fait autrement. En effet, si vous omettez un appel au super constructeur, le super constructeur sans argument sera automatiquement invoqué. Pour ne pas dire que c'est mauvais style; certaines personnes aiment être explicites.
Cependant, cela devient utile lorsque le super constructeur prend les arguments que vous voulez transmettre de la sous-classe.
public class Animal {
private final String noise;
protected Animal(String 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 les constructor
, methods
et properties
de la classe parente.
Vous pouvez également utiliser le mot clé super
de la sous-classe lorsque vous souhaitez appeler une méthode de la classe parente après l'avoir 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 (strings[] args) {
TouchPhone p = new TouchPhone();
p.print();
}
}
Ici, la ligne super.print()
appelle la méthode print()
de la superclasse CellPhone
. La sortie sera:
I'm a cellphone
I'm a touch screen cellphone
Lorsque vous souhaitez appeler le constructeur de la super-classe, initialisez les champs qu’il contient. Jetez un coup d'œil à 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 appelez super()
pour exécuter spécifiquement un constructeur de votre super-classe. Etant 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 "est-un".
Vous pouvez l'utiliser pour appeler la méthode d'une superclasse (par exemple, lorsque vous surchargez une telle méthode, super.foo (), etc.). Cela vous permettrait de conserver cette fonctionnalité et de l'ajouter à tout ce que vous avez dans la substitution. méthode.
Super appellera votre méthode parente. Voir: http://leepoint.net/notes-Java/oop/constructors/constructor-super.html
Je viens de l'essayer, en 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(String args[]){
new Super_sub();
}
}
De la documentation Oracle page :
Si votre méthode substitue l'une des méthodes de sa superclasse, vous pouvez l'invoquer via le mot clé
super
.
Vous pouvez également utiliser super
pour faire référence à un champ masqué (bien que le masquage de champs soit déconseillé).
Utilisation de super
dans le constructeur des sous-classes:
L'invocation 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 la suivante:
super();
ou:
super(parameter list);
Avec super()
, le constructeur de la super-classe sans argument est appelé. Avec super(parameter list)
, le constructeur de la superclasse avec une liste de paramètres correspondante est appelé.
Remarque: Si un constructeur n'appelle pas explicitement un constructeur de superclasse, le compilateur Java insère automatiquement un appel au constructeur sans argument de la superclasse . Si la super classe n'a pas de constructeur sans argument, vous obtiendrez une erreur de compilation.
Article similaire:
La première ligne du constructeur de votre sous-classe doit être un appel à super()
pour que le constructeur de la super-classe soit appelé.