Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Super Java

Super Java

Dans ce didacticiel, nous allons découvrir le super mot-clé en Java à l'aide d'exemples.

Le super Le mot clé en Java est utilisé dans les sous-classes pour accéder aux membres de la superclasse (attributs, constructeurs et méthodes).

Avant d'en savoir plus sur le super mot-clé, assurez-vous de connaître l'héritage Java.

Utilisations du super mot-clé

  1. Pour appeler les méthodes de la superclasse qui est remplacée dans la sous-classe.
  2. Pour accéder aux attributs (champs) de la superclasse si la superclasse et la sous-classe ont des attributs portant le même nom.
  3. Pour appeler explicitement la superclasse no-arg (par défaut) ou le constructeur paramétré à partir du constructeur de la sous-classe.

Comprenons chacune de ces utilisations.

1. Accéder aux méthodes surchargées de la superclasse

Si des méthodes portant le même nom sont définies à la fois dans la superclasse et dans la sous-classe, la méthode de la sous-classe remplace la méthode de la superclasse. C'est ce qu'on appelle le remplacement de méthode.

Exemple 1 :remplacement de méthode

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){
    display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

Sortie

I am a dog

Dans cet exemple, en créant un objet dog1 de chien classe, nous pouvons appeler sa méthode printMessage() qui exécute alors le display() déclaration.

Depuis display() est défini dans les deux classes, la méthode de la sous-classe Dog remplace la méthode de la superclasse Animal . D'où le display() de la sous-classe est appelée.

Et si la méthode surchargée de la superclasse doit être appelée ?

Nous utilisons super.display() si la méthode surchargée display() de la superclasse Animal doit être appelé.

Exemple 2 :super pour appeler la méthode de la superclasse

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){

    // this calls overriding method
    display();

    // this calls overridden method
    super.display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

Sortie

I am a dog
I am an animal

Ici, comment fonctionne le programme ci-dessus.

2. Accéder aux attributs de la superclasse

La superclasse et la sous-classe peuvent avoir des attributs portant le même nom. Nous utilisons le super mot clé pour accéder à l'attribut de la superclasse.

Exemple 3 :Accéder à l'attribut de la superclasse

class Animal {
  protected String type="animal";
}

class Dog extends Animal {
  public String type="mammal";

  public void printType() {
    System.out.println("I am a " + type);
    System.out.println("I am an " + super.type);
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printType();
  }
}

Sortie :

I am a mammal
I am an animal

Dans cet exemple, nous avons défini le même champ d'instance type à la fois dans la superclasse Animal et la sous-classe Chien .

Nous avons ensuite créé un objet dog1 du Chien classer. Ensuite, le printType() méthode est appelée à l'aide de cet objet.

À l'intérieur du printType() fonction,

  • typer fait référence à l'attribut de la sous-classe Chien .
  • super.type fait référence à l'attribut de la superclasse Animal.

Par conséquent, System.out.println("I am a " + type); imprime Je suis un mammifère . Et, System.out.println("I am an " + super.type); imprime Je suis un animal .

3. Utilisation de super() pour accéder au constructeur de la superclasse

Comme nous le savons, lorsqu'un objet d'une classe est créé, son constructeur par défaut est automatiquement appelé.

Pour appeler explicitement le constructeur de la superclasse à partir du constructeur de la sous-classe, nous utilisons super() . C'est une forme spéciale du super mot-clé.

super() ne peut être utilisé qu'à l'intérieur du constructeur de la sous-classe et doit être la première instruction.

Exemple 4 :Utilisation de super()

class Animal {

  // default or no-arg constructor of class Animal
  Animal() {
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // default or no-arg constructor of class Dog
  Dog() {

    // calling default constructor of the superclass
    super();

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

Sortie

I am an animal
I am a dog

Ici, lorsqu'un objet dog1 de chien est créée, elle appelle automatiquement le constructeur par défaut ou sans argument de cette classe.

Dans le constructeur de la sous-classe, le super() L'instruction appelle le constructeur de la superclasse et exécute les instructions qu'elle contient. Par conséquent, nous obtenons la sortie Je suis un animal .

Le déroulement du programme revient ensuite au constructeur de la sous-classe et exécute les instructions restantes. Ainsi, je suis un chien sera imprimé.

Cependant, en utilisant super() n'est pas obligatoire. Même si super() n'est pas utilisé dans le constructeur de la sous-classe, le compilateur appelle implicitement le constructeur par défaut de la superclasse.

Alors, pourquoi utiliser du code redondant si le compilateur invoque automatiquement super() ?

Il est obligatoire si le constructeur paramétré (un constructeur qui prend des arguments) de la superclasse doit être appelée depuis le constructeur de la sous-classe.

Le super() paramétré doit toujours être la première instruction dans le corps du constructeur de la sous-classe, sinon, nous obtenons une erreur de compilation.

Exemple 5 :appel d'un constructeur paramétré à l'aide de super()

class Animal {

  // default or no-arg constructor
  Animal() {
    System.out.println("I am an animal");
  }

  // parameterized constructor
  Animal(String type) {
    System.out.println("Type: "+type);
  }
}

class Dog extends Animal {

  // default constructor
  Dog() {

    // calling parameterized constructor of the superclass
    super("Animal");

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

Sortie

Type: Animal
I am a dog

Le compilateur peut appeler automatiquement le constructeur no-arg. Cependant, il ne peut pas appeler de constructeurs paramétrés.

Si un constructeur paramétré doit être appelé, nous devons le définir explicitement dans le constructeur de la sous-classe.

Notez que dans l'exemple ci-dessus, nous avons explicitement appelé le constructeur paramétré super("Animal") . Le compilateur n'appelle pas le constructeur par défaut de la superclasse dans ce cas.


Java

  1. Opérateurs Java
  2. Commentaires Java
  3. Java pour chaque boucle
  4. Chaînes Java
  5. InterfaceJava
  6. Classe anonyme Java
  7. Java essayer avec des ressources
  8. Annotations Java
  9. Assertions Java