77 votes

Quand dois-je utiliser super() en Java?

Je suis en train d'apprendre à propos de l'héritage de classe et de tel dans mon Java cours en ce moment, mais je ne comprends pas. Quand devrais-je utiliser le "super()" appel?

Edit:
J'ai trouvé cet exemple de code où 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 à l' k variable dans la super-classe. Cependant, dans les autres cas, qu'est - super(); ? Sur son propre?

136voto

Mark Peters Points 42201

Appelant exactement super() est toujours redondant. Il est explicitement faire ce qui serait implicitement fait le contraire. C'est parce que si vous omettez un appel à la super constructeur, le non-argument super constructeur sera appelé automatiquement de toute façon. Pour ne pas dire que c'est mauvais style; certaines personnes aiment être explicite.

Cependant, lorsqu'il devient utile, c'est quand le super constructeur prend les arguments que vous souhaitez passer 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");
    }
}

42voto

Zain Shaikh Points 3324

super est utilisé pour appeler l' constructor, methods et properties de la classe parent.

22voto

Dhiraj Shekar Points 41

Vous pouvez également utiliser l' super mot-clé dans la sous-classe lorsque vous voulez appeler une méthode de la classe parente lorsque vous avez remplacé dans la sous-classe.

Exemple:

Public Class CellPhones {
   Public void printMethod() {
     system.out.println("I'm a cellphone");
   }
}

Public Class TouchPhones extends CellPhones {
  // overriding the printMethod in Cellphones class
  Public void printMethod() {
     super.printMethod();
     system.out.println("I'm a touch screen cell phone");
  }
  Public static void main (strings[] args) {
    TouchPhones p = new TouchPhones();
    p.printMethod();
  }
}

Ici, l' super.printMethod() ligne appelle l' printMethod() de la CellPhones classe. La sortie sera:

I'm a cellphone
I'm a touch screen cell phone

9voto

Jon Points 23749

Lorsque vous souhaitez que le super constructeur de la classe à être appelé à initialiser les champs. Jetez un oeil à cet article pour une compréhension de quand l'utiliser:

http://download.oracle.com/javase/tutorial/java/IandI/super.html

8voto

TartanLlama Points 1461

Vous pouvez l'utiliser en tant que la première ligne d'un constructeur de sous-classe d'appeler le constructeur de la classe parent.

Par exemple:

public class TheSuper{
    public TheSuper(){
        eatCake();
    }
}

public class TheSub extends TheSuper{
    public TheSub(){
        super();
        eatMoreCake();
    }
}

La construction d'une instance de TheSub serait appeler à la fois eatCake() et eatMoreCake()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X