52 votes

Différence entre les mots-clés "this" et "super" en Java

Quelle est la différence entre les mots clés this et super ?

Les deux sont utilisés pour accéder aux constructeurs de classe non? L'un de vous peut-il expliquer?

73voto

Nithesh Chandra Points 1232

Considérons cette situation

 class Animal {
  void eat() {
    System.out.println("animal : eat");
  }
}

class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void anotherEat() {
    super.eat();
  }
}

public class Test {
  public static void main(String[] args) {
    Animal a = new Animal();
    a.eat();
    Dog d = new Dog();
    d.eat();
    d.anotherEat();
  }
}
 

La sortie va être

 animal : eat
dog : eat
animal : eat
 

La troisième ligne affiche "animal: manger" parce que nous appelons super.eat() . Si nous avions appelé this.eat() , cela aurait été imprimé "chien: manger".

54voto

Jaywalker Points 1455

super est utilisé pour accéder aux méthodes de la classe de base tandis que this est utilisé pour accéder aux méthodes de la classe actuelle.

En étendant la notion, si vous écrivez super() , cela fait référence au constructeur de la classe de base, et si vous écrivez this() , cela fait référence au constructeur de la classe même où vous écrivez ceci code.

21voto

Erick Robertson Points 12958

this est une référence à l'objet saisi au cours actuel, et super est une référence à l'objet typé en tant que parent de la classe.

Dans le constructeur, this() appelle un constructeur défini dans la classe en cours. super() appelle un constructeur défini dans la classe parent. Le constructeur peuvent être définies dans la classe parent, mais il va se réfèrent à un substituée la plus proche de la classe en cours. Les appels vers d'autres constructeurs peuvent être effectuées uniquement la première ligne dans un constructeur.

L'appel de méthodes fonctionne de la même manière. Appelant this.method() appelle une méthode de la classe actuelle où l' super.method() qui fera appel à la même méthode, telle que définie dans la classe parent.

10voto

Stephen C Points 255558

D'après votre question, j'en déduis que vous êtes vraiment se demander à propos de l'utilisation de this et super dans le constructeur de chaînage; par exemple

public class A extends B {
    public A(...) {
        this(...);
        ...
    }
}

rapport

public class A extends B {
    public A(...) {
        super(...);
        ...
    }
}

La différence est simple:

  • L' this former des chaînes à un constructeur de la classe en cours; c'est à dire dans l' A classe.

  • L' super former des chaînes à un constructeur dans l'immédiat super-classe; c'est à dire dans l' B classe.

9voto

Buhake Sindi Points 38654

this se réfère à un état de référence de l' actuelle classe.
super fait référence à la mère de la classe actuelle (qui a appelé à la super mot-clé).

En faisant this, il permet l'accès aux méthodes et attributs de la classe actuelle (y compris de sa propre salle de méthodes et attributs).

super vous permet d'accéder public/protected méthode attributs/des parent(de base) de la classe. Vous ne pouvez pas voir le parent privé de la méthode/attributs.

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