English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Java

contrôle de flux Java

Java tableau

Java orienté objet (I)

Java orienté objet (II)

Java orienté objet (III)

Gestion des exceptions Java

Java Liste (List)

Java Queue (file d'attente)

Java Map

Java Set

Java entrée/sortie (I/O)

Java Reader/Writer

Autres sujets Java

Héritage Java

Dans ce tutoriel, nous allons apprendre l'héritage en Java à travers des exemples.

L'héritage est l'une des fonctionnalités importantes de l'OP (programmation orientée objet), qui nous permet de définir une nouvelle classe à partir d'une classe existante. Par exemple,

classe Animal
{
    // méthode eat()
    // méthode sleep()
}
class Dog extends Animal
{
    // moyen bark()
}

Dans Java, nous utilisons la clé de mots extends pour hériter de la classe. Ici, nous héritons de la classe Dog à partir de la classe Animal.

Animal est la classe mère (classe parente ou classe de base), et Dog est la sous-classe (sous-classe ou classe dérivée). La sous-classe hérite des champs et des méthodes de la classe mère.

est-une relation

l'héritage estest-aune relation, il n'y a que lorsque deux classes existent entre elles-un rapport de relation, nous utilisons l'héritage

Voici quelques exemples :

  • La voiture est un véhicule.

  • L'orange est un fruit.

  • Le chirurgien est un médecin.

  • Le chien est un animal.

Exemple1:héritage Java

class Animal {
   public void eat() {
      System.out.println("Je peux manger");
   }
   protected String type = "animal";
      public void sleep() {
   }
}
class Dog extends Animal {
   public void bark() {
      System.out.println("Je peux aboyer");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1System.out.println("Je peux dormir");
      dog1.bark();
   }
}

Résultat de la sortie

Je peux manger
.sleep();
I can bark

Ici, nous avons hérité de la sous-classe Dog à partir de la classe parente Animal. La classe Dog hérite des méthodes eat() et sleep() de la classe Animal.

Par conséquent, l'objet de la classe Dog peut accéder aux membres de la classe Dog et de la classe Animal.

mot-clé protégé

Nous avons découvert les modificateurs d'accès privé et public dans le tutoriel précédent.

  • Les membres privé ne peuvent être accédés qu'à l'intérieur de la classe

  • Les membres public peuvent être accédés partout

Vous pouvez également définir des méthodes et des champs en tant que protégés, les membres protégés peuvent être accédés

  • à l'intérieur de la classe

  • dans sa sous-classe

  • à l'intérieur du même paquet

C'est un résumé qui peut accéder aux modificateurs d'accès.

modificateurclasse
paquet
sous-classeglobale
publicOuiOuiOuiOui
privéOuiNonNonNon
protégéOuiOuiOuiNon

Exemple2:mot-clé protégé

class Animal {
   protected String type;
   private String color;
   public void eat() {
      System.out.println("Je peux manger");
   }
   protected String type = "animal";
      public void sleep() {
   }
   public String getColor(){
      return color;
   }
   public void setColor(String col){
      color = col;
   }
}
class Dog extends Animal {
   public void displayInfo(String c){
      System.out.println("Je suis un " + type);
      System.out.println("Ma couleur est " + c);
   }
   public void bark() {
      System.out.println("Je peux aboyer");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1System.out.println("Je peux dormir");
      dog1.bark();
 
      dog1.type = "mammal";
      dog1.setColor("black");
      dog1.displayInfo(dog1).getColor()); 
   }
}

Résultat de la sortie

Je peux manger
.sleep();
I can bark
Je suis un mammifère
Ma couleur est noire

Ici, le champ type de la classe Animal est protégé. Nous avons accédé à ce champ à partir de la classe Main

dog1.type = "mammal";

C'est possible, car les classes Animal et Main se trouvent dans le même paquet (le même fichier).

Java方法重写

Java Redéfinition de méthode

 À partir de l'exemple ci-dessus, nous savons que l'objet de la sous-classe peut également accéder aux méthodes de sa classe parente.

Qu'arrive-t-il si la même méthode est définie dans la classe parente et dans la sous-classe ?

Exemple3Dans ce cas, la méthode de la sous-classe va couvrir la méthode de la classe parente. Par exemple,/:Redéfinition de méthode

class Animal {
   Exemple de redéfinition
   public void eat() {
      System.out.println("Je peux manger");
   }
   protected String type = "animal";
      public void sleep() {
   }
}
class Dog extends Animal {
  
   @Override
   public void eat() {
      System.out.println("Je mange de la nourriture pour chien");
   }
   public void bark() {
      System.out.println("Je peux aboyer");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1System.out.println("Je peux dormir");
      dog1.bark();
   }
}

Résultat de la sortie

Je mange de la nourriture pour chien
.sleep();
I can bark

Je peux dormir1Note: The difference in calling constructors and super methods. For more information, please visit

Dans ce cas, eat() apparaît à la fois dans la classe parente Animal et dans la sous-classe Dog. Nous avons créé un objet de sous-classe Dog appelé dog1Lorsque l'objet appelle eat()

Dans le programme ci-dessus, nous avons utilisé l'annotation @Override pour informer le compilateur que nous redéfinissons une méthode. Mais ce n'est pas obligatoire. Nous en apprendrons plus surRedéfinition de méthodeNote: The difference in calling constructors and super methods. For more information, please visit

Si vous avez besoin d'appeler la méthode eat() de la sous-classe Animal, utilisez la clé super.

Exemple4:super clé

class Animal {
   public Animal() {
     System.out.println("Je suis un animal");
   }
   public void eat() {
     System.out.println("Je peux manger");
   }
}
class Dog extends Animal {
   public Dog(){
      super();
      System.out.println("Je suis un chien");
   }
  @Override
  public void eat() {
     super.eat();
     System.out.println("Je mange de la nourriture pour chien");
  }
   public void bark() {
      System.out.println("Je peux aboyer");
   }
}
class Main {
   public static void main(String[] args) {
      Dog dog1 = new Dog();
      dog1.eat();
      dog1.bark();
   }
}

Résultat de la sortie

Je suis un animal
Je suis un chien
Je peux manger
Je mange de la nourriture pour chien
I can bark

在这里,我们使用了super关键字通过super()来调用构造函数。 另外,我们使用super.eat()调用Animal超类的eat()方法。

I can barkHere, we use the super keyword to call the constructor through super(). In addition, we use super.eat() to call the eat() method of the Animal superclass.Note: The difference in calling constructors and super methods. For more information, please visit

Java super keyword

.

  • Inheritance types - There are five types of inheritance.

  • Single inheritance - Class B inherits only from class A.

  • Multi-level inheritance - Class B inherits from class A, and then class C inherits from class B.

  • Layered inheritance -Class A as a superclass of B, C, and D.

  • Multiple inheritance -Class C extends interface A and B.Mixed inheritanceTwo or more

Inherited

Mixed.

  • Why use inheritance? Java does not support multiple inheritance and mixed inheritance through classes. However, we can implement multiple inheritance in Java through interfaces. We will learn about interfaces in the following chapters.

  • The most important use is the reusability of code. Code that exists in the superclass does not need to be rewritten in the subclass. In the following chapters, we will learn more about polymorphism.