English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
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.
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.
modificateur | classe | paquet | sous-classe | globale |
---|---|---|---|---|
public | Oui | Oui | Oui | Oui |
privé | Oui | Non | Non | Non |
protégé | Oui | Oui | Oui | Non |
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 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 ?
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.
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
.
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
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.