web-dev-qa-db-fra.com

Quand est-ce que j'utilise super ()?

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?

77
muttley91

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");
    }
}
135
Mark Peters

super est utilisé pour appeler les constructor, methods et properties de la classe parente.

42
Zain Shaikh

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
22
Dhiraj Shekar

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

9
Jon

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()

8
TartanLlama

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".

1
0xCAFEBABE

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.

1
AHungerArtist
1
Ben Groot

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();
    }
}
0
user2567665

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:

Polymorphisme vs Priorité vs Surcharge

0
Ravindra babu

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é.

0
robev