English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce cours, nous allons apprendre à utiliser la redéfinition de méthode en Java à l'aide d'exemples.
Dans le cours précédent, nous avons appris l'héritage. L'héritage est une propriété de l'OOP qui nous permet de dériver une nouvelle classe (sous-classe) à partir d'une classe existante (superclasse), et la sous-classe hérite des attributs et des méthodes de la superclasse.
Si une méthode identique est définie à la fois dans la superclasse et dans la sous-classe, la méthode de la sous-classe couvrira la méthode de la superclasse. Cela s'appelle la couverture de méthode (ou redéfinition de méthode).
class Animal { public void displayInfo() { System.out.println("Je suis un animal."); } } class Dog extends Animal { @Override public void displayInfo() { System.out.println("Je suis un chien."); } } class Main {}} public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Output:
I am a dog.
Dans le programme ci-dessus, la méthode displayInfo() existe à la fois dans la superclasse Animal et dans la sous-classe Dog.
Lorsque nous utilisons d1Lorsque l'objet (l'objet de la sous-classe) appelle displayInfo(), il appelle la méthode de la sous-classe Dog. La méthode displayInfo() de la sous-classe couvre la méthode identique de la superclasse.
Attention, dans notre exemple, nous avons utilisé le commentaire @Override. En Java, les commentaires sont des métadonnées que nous utilisons pour fournir des informations au compilateur. Ici, le commentaire @Override indique au compilateur que la méthode après ce commentaire couvrira la méthode de la superclasse.
L'utilisation de @Override n'est pas obligatoire. Mais lorsque nous utilisons cette méthode, elle doit suivre toutes les règles d'overriding. Sinon, le compilateur générera des erreurs.
La classe parent et la classe fille doivent avoir le même nom de méthode, le même type de retour et la même liste de paramètres.
Nous ne pouvons pas redéfinir les méthodes déclarées final et static.
Nous devons toujours redéfinir les méthodes abstraites de la classe parent (qui seront discutées dans des tutoriels ultérieurs).
Un problème courant qui se pose lors de l'exécution de la redéfinition en Java est :
Pouvons-nous accéder à la méthode de la classe parent après la redéfinition ?
La réponse estOui。Pour accéder à une méthode de la classe parent à partir de la classe fille, nous utilisons le mot-clé super.
class Animal { public void displayInfo() { System.out.println("Je suis un animal."); } } class Dog extends Animal { public void displayInfo() { super.displayInfo(); System.out.println("Je suis un chien."); } } class Main {}} public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Output:
Je suis un animal. I am a dog.
Dans cet exemple, la classe fille Dog a redéfini la méthode displayInfo() de la classe parent Animal.
Lorsque nous utilisons la classe fille Dog,1Lorsque l'objet appelle la méthode displayInfo(), il appelle la méthode interne de la classe fille Dog. Il ne appellera pas la méthode interne de la classe parent.
À l'intérieur de la méthode displayInfo() de la classe fille Dog, nous utilisons super.displayInfo() pour appeler la méthode displayInfo() de la classe parent.
Il est important de noter que les constructeurs Java ne sont pas hérités. Par conséquent, il n'existe pas de problèmes de redéfinition de constructeur en Java.
Mais nous pouvons appeler le constructeur de la classe parent à partir de sa classe fille. Pour cela, nous utilisons super(). Pour plus d'informations, veuillez visiterJava super clé。
Les méthodes déclarées de la même manière dans la classe parent et la classe fille peuvent avoir des visiteurs différents. Mais il y a une restriction.
Nous ne pouvons utiliser que ceux des visiteurs de la classe fille qui fournissent une permission d'accès supérieure à celle de la classe parent. Par exemple,
Supposons que la méthode myClass() de la classe parent soit déclarée protected. Ensuite, la méthode myClass() de la classe fille peut être public ou protected, mais ne peut pas être private.
class Animal { protected void displayInfo() { System.out.println("Je suis un animal."); } } class Dog extends Animal { public void displayInfo() { System.out.println("Je suis un chien."); } } class Main {}} public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Output:
I am a dog.
In the above example, the subclass Dog overrides the displayInfo() method of the superclass Animal.
Every time we use d1When calling displayInfo() with an object of the subclass, the method within the subclass is called.
Note that displayInfo() is declared as protected in the Animal superclass. This method has a public access specifier (public) in the Dog subclass. This is allowed because public provides greater access privileges than protected.
In Java, an abstract class is created as a superclass (base class) for other classes. Moreover, if a class contains an abstract method, it must be overridden.
In the following tutorials, we will learn more about the overloading of abstract classes and abstract methods.