Polymorphisme Java
Il existe deux types de polymorphisme:
(1) Polymorphisme à temps de compilation (polymorphisme de conception-temps): surcharge de méthode.
(2) Polymorphisme d'exécution: le système d'exécution Java décide quelle méthode appelle en fonction du type d'instance invoquant la méthode, qui est appelée polymorphisme d'exécution. (Les choses dont nous parlons habituellement sont le polymorphisme d'exécution, donc le polymorphisme se réfère principalement au polymorphisme d'exécution)
Trois conditions nécessaires à l'existence du polymorphisme au moment de l'exécution:
1. Il doit y avoir un héritage (y compris la mise en œuvre des interfaces);
2. Il doit y avoir une réécriture;
3. La référence de la classe parent pointe vers l'objet de classe enfant.
Avantages du polymorphisme:
1. Substitutabilité. Les polymorphismes sont interchangeables pour les codes existants. Par exemple, le polymorphisme fonctionne sur la classe Circle Circle, et fonctionne également sur toute autre géométrie circulaire, comme un cercle.
2. Extensibilité. Le polymorphisme est évolutif au code. L'ajout de nouvelles sous-classes n'affecte pas le fonctionnement et le fonctionnement des polymorphismes, l'héritage et d'autres caractéristiques des classes existantes. En fait, il est plus facile d'obtenir des fonctions polymorphes en ajoutant de nouvelles sous-classes. Par exemple, sur la base de la réalisation du polymorphisme des cônes, des semi-objets et des hémisphères, il est facile d'ajouter des polymorphismes des sphères.
3. Capacité d'interface. Le polymorphisme est obtenu par des superclasses par des signatures de méthode, fournissant une interface commune aux sous-classes, et les sous-classes sont implémentées par des sous-classes pour l'améliorer ou l'écraser. Comme le montre la figure 8.3. Dans la figure, la forme de super classe spécifie deux méthodes d'interface qui implémentent le polymorphisme, composeArea () et ComputeVolume (). Les sous-classes, telles que le cercle et la sphère, améliorent ou remplacent ces deux méthodes d'interface afin d'atteindre le polymorphisme.
4. Flexibilité. Il reflète des opérations flexibles et diverses dans les applications et améliore l'efficacité d'utilisation.
5. Simplicité. Le polymorphisme simplifie le processus d'écriture et de modification du code du logiciel d'application, en particulier lorsqu'il s'agit des opérations et des opérations d'un grand nombre d'objets, cette fonctionnalité est particulièrement importante et importante.
Remarque: La priorité est de haute à basse: ce.show (o), super.show (o), this.show ((super) o), super.show ((super) o).
Questions d'entrevue connexes:
classe A {public String show (d obj) .. {return ("a and d"); } public String show (a obj) .. {return ("a et a"); }} La classe B étend un {public String show (b obj) .. {return ("b et b"); } public String show (a obj) .. {return ("b et a"); }} La classe C s'étend B ... {} La classe D s'étend B ... {}(2) Question: Quels sont les résultats de sortie suivants?
A a1 = new a ();
A a2 = new B ();
B b = nouveau b ();
C C = nouveau C ();
D d = new D ();
System.out.println (a1.show (b)); ①
System.out.println (a1.show (c)); ②
System.out.println (a1.show (d)); ③
System.out.println (a2.show (b)); ④
System.out.println (a2.show (c)); ⑤
System.out.println (a2.show (d)); ⑥
System.out.println (b.show (b)); ⑦
System.out.println (b.show (c)); ⑧
System.out.println (b.show (d)); ⑨
(Iii) Répondre
① A et A
② A et A
③ A et D
④ B et un
⑤ B et un
⑥ A et D
⑦ B et B
⑧ B et B
⑨ A et D
analyser:
Lorsque vous faites ce type de question, vous devez toujours utiliser l'ordre prioritaire:
Pour la première question:
A1 est un objet instancié de la classe A, donc cela pointe vers A, puis recherche ce.show (b). Puisqu'il n'y a pas de méthode, il va sur super.show (b). Cependant, comme la classe A n'a pas de superclasse, il revient à ce.show (Super B). Étant donné que la superclasse de B est un, elle équivaut à ce.show (a). Ensuite, cette méthode se trouve dans la classe A, donc A et A sont la sortie.
Pour la question 2:
De même, A1 est un objet instancié de la classe A, donc cela pointe vers A, puis recherchez cette méthode. Puisque je cherche cela dans la superclasse de la classe A, mais A n'a pas de superclasse, donc je vais à ce.show (super C). Étant donné que la superclasse de C est B, je recherche cette méthode. Ensuite, B a également une superclasse, qui est un, donc je recherche ce.show (a), et je l'ai trouvé, donc j'ai sorti A et A;
Pour la question 3:
De même, A1 est un objet instancié de la classe A, donc cela pointe vers A, puis trouvez cette méthode.
Pour la question 4:
A2 est un objet de référence de la classe B, avec le type A, donc cela pointe vers la classe A, puis trouvez cette méthode. Étant donné que la classe A n'a pas de superclasse, elle arrive ceci.show (super b). La superclasse de B est A, c'est-à-dire Super B = A, alors exécutez cette méthode. show (a), recherchez Show (a) dans la méthode A, et le trouvez, mais comme A2 est un objet de référence de la classe B, et la classe B couvre la méthode Show (A) de la classe A, l'exécution finale de la méthode Show (a) dans la classe B, c'est-à-dire la sortie B et A;
Pour la question 5:
A2 est un objet de référence de la classe B, avec le type A, donc cela pointe vers la classe A, puis recherche cette méthode. Étant donné que la classe A n'a pas de superclasse, elle est B, donc elle est B, donc elle se trouve dans la classe A, mais elle n'est pas trouvée. B a également une superclasse, c'est-à-dire A, donc il continue de rechercher la méthode Show (A) dans la classe A, et trouvée, mais parce que A2 est un objet de référence de la classe B, et la classe B couvre la méthode Show (A) de la classe A, donc elle est finalement exécutée. La méthode Show (A) dans la classe B, c'est-à-dire la sortie de B et A;
Pour la question 6:
A2 est un objet de référence de la classe B, avec le type A, donc cela pointe vers la classe A, puis trouvez cette méthode.show (d) dans la classe A, et l'a trouvé. Cependant, comme A2 est un objet de référence de la classe B, il se trouve dans la classe B, il est donc constaté s'il existe une méthode Afficher (D) remplacée dans la classe B, il est donc exécuté. Ainsi, la méthode Show (D) dans la classe A, c'est-à-dire la sortie A et D;
Pour la question sept:
B est un objet instancié de la classe B. Le Premier ministre exécute ce.how (b), recherche la méthode Show (b) dans la classe B, la trouve et sort directement B et B;
Pour la question 8:
B est un objet instancié de la classe B. Le Premier ministre exécute ce show (c), et recherche la méthode du spectacle (c) dans la classe B, mais elle n'est pas trouvée, donc quand je vais sur super.show (c), la superclasse de b est a, donc quand je cherche le spectacle (c) Méthode dans la classe A, mais ce n'est pas trouvé, alors quand je vais à la recherche. Méthode de show (b) F Dans la classe B, j'ai trouvé, donc lorsque j'exécute la méthode Show (B) dans la classe B, I Sortie B et B;
Pour la question 9:
B est un objet instancié de la classe B. Le Premier ministre exécute ce.show (d), recherche la méthode du spectacle (D) dans la classe B, mais elle n'est pas trouvée, donc je suis allé à super.show (d), et la superclasse de B est la classe A, donc je recherche la méthode du spectacle (D) dans la classe A, et je l'ai trouvé, et je suis en train de sortir A et D;
C'est la méthode que j'ai résumé après avoir lu les questions sur Internet. J'espère que ce sera bénéfique pour tout le monde.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!