Maison  >  Article  >  Java  >  Quelle est la différence entre la réécriture et la surcharge en Java

Quelle est la différence entre la réécriture et la surcharge en Java

青灯夜游
青灯夜游original
2020-10-16 13:42:5017159parcourir

Différence : la réécriture se produit lorsqu'une sous-classe réécrit le processus d'implémentation d'une méthode qui permet l'accès à la classe parent. Le nom de la méthode et la liste des paramètres sont les mêmes, et la valeur de retour et les paramètres formels ne peuvent pas être modifiés. La surcharge se produit lorsque plusieurs fonctions du même nom avec un nombre ou des types de paramètres différents existent simultanément dans la même classe, avec le même nom de méthode et des listes de paramètres différentes.

Quelle est la différence entre la réécriture et la surcharge en Java

Recommandations associées : "Tutoriel vidéo Java"

Q : Que sont la surcharge et la réécriture Java ? Quelle est la différence ?

Réponse :
 La surcharge (Surcharge) est un moyen pour une classe de traiter différents types de données de manière unifiée. L'essence est que plusieurs <.> avec un nombre ou des types de paramètres différents (le type de valeur de retour est facultatif et le type de retour ne peut pas être utilisé comme critère pour distinguer les fonctions surchargées) existent dans la même classe en même temps, ce qui est une manifestation du polymorphisme dans un class ( 同名函数 pour déterminer quelle méthode utiliser lors de l'appel d'une méthode (polymorphisme). 通过传递不同参数个数和参数类型

Quelle est la différence entre la réécriture et la surcharge en Java

Figure 1. Un exemple de surcharge dans la classe Android Quelle est la différence entre la réécriture et la surcharge en Java

Override (Override) est la classe parent avec L'essence du polymorphisme entre sous-classes est de redéfinir les fonctions de la classe parent. Si une méthode définie dans une sous-classe a le même nom et les mêmes paramètres que sa classe parent, la méthode sera réécrite, mais l'accès à la fonction de sous-classe ne peut pas être modifié. inférieur à celui de la classe parent ; si une méthode de la sous-classe a le même nom de méthode, le même type de retour et la même liste de paramètres qu'une méthode de la classe parent, la nouvelle méthode écrasera la méthode d'origine dans la classe parent. est requis La méthode peut utiliser le mot-clé super.

Quelle est la différence entre la réécriture et la surcharge en Java

Figure 2. Un exemple de réécriture courant dans les classes Android Quelle est la différence entre la réécriture et la surcharge en Java
----------

** Règles de surcharge : ** doit avoir des listes de paramètres différentes ; peut avoir différents types de retour ; peut avoir différents modificateurs d'accès ; peut lancer différentes exceptions.

Règles de réécriture : La restriction du modificateur d'accès doit être supérieure ou égale au modificateur d'accès de la méthode remplacée ; la méthode de substitution ne doit pas lever une nouvelle exception vérifiée ou être plus petite ; que le modificateur d'accès de la méthode remplacée. La méthode remplacée déclare une exception vérifiée plus large. Par exemple, la méthode de la classe parent déclare une exception vérifiée IOException. Lors du remplacement de cette méthode, elle ne peut pas lever d'exception. Elle ne peut lever que des exceptions de sous-classe de IOException. Des exceptions non vérifiées peuvent être générées anormalement. 参数列表必须完全与被重写的方法相同,否则不能称其为重写;返回类型必须一直与被重写的方法相同,否则不能称其为重写;

La surcharge et la réécriture sont différentes manifestations de . Java 多态性
La réécriture est une manifestation du polymorphisme entre les classes parentes et les sous-classes, qui fonctionne au moment de l'exécution (polymorphisme dynamique, tel que la liaison dynamique)
La surcharge est une manifestation du polymorphisme dans une classe, qui fonctionne au moment de la compilation (polymorphisme statique, tel que la liaison statique).


Q : Les constructeurs Java peuvent-ils être remplacés et surchargés ?

Réponse :

La substitution est une méthode de sous-classe qui remplace la méthode de la classe parent. Le nom de la méthode remplacée reste inchangé et le nom de la méthode du constructeur de classe doit être cohérent avec le nom de la classe. En supposant que si la méthode de construction de la classe parent peut être remplacée par la sous-classe, le nom de classe de la sous-classe doit être cohérent avec le nom de classe de la classe parent, donc
La méthode de construction de Java est . La surcharge est pour la même, donc le constructeur 不能被重写. 可以被重载

Q : Quel est le résultat du programme suivant et pourquoi ?

public class Demo {
    public boolean equals( Demo other) {
        System.out.println("use Demo equals." );
        return true;    }
    public static void main(String[] args) {    
    Object o1 =new Demo ();
    Object o2 =new Demo ();        
    Demo o3 =new Demo ();
    Demo o4 =new Demo ();

   if (o1.equals(o2)) {
            System.out.println("o1 is equal with o2.");
        }

   if(o3.equals(o4)) {             
            System.out.println("o3 is equal with o4.");
        }
    }}
Réponse : Les résultats du programme ci-dessus sont les suivants.

use Demo equals.
o3 is equal with o4.
Parce que la méthode public boolean equals(Demo other) dans la classe Demo ne remplace pas la méthode public boolean equals(Object obj) dans la classe Object, la raison est qu'elle viole les règles de paramètres, l'une des qui est le type Demo Et l'autre est de type Object, donc ces deux méthodes sont surchargées (se produisant au moment de la compilation) plutôt que de remplacer

, car au moment de la compilation, o1 et o2 sont tous deux de type Object, et 故当调用 o1.equals(o2) 时,o2 是 Object 类型参数,实际上调用了 Object 类中的 public boolean equals(Object obj) 方法 Classe d'objets La méthode equals renvoie false en comparant les adresses mémoire ; lorsque o3.equals(o4) est appelée, la méthode equals(Demo other) de la classe Demo est en fait appelée, car au moment de la compilation, o3 et o4 sont tous deux Demo. tapez, c'est pourquoi il est imprimé ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn