En termes simples, différents objets accomplissent le même comportement, mais produisent des états différents
Un exemple très simple : les élèves d'une certaine classe de l'école passent le même examen une fois l'examen terminé. ont des résultats aux tests différents. Certains échouent, certains errent autour de la ligne de réussite et certains ont des scores élevés. Alors, à quel niveau êtes-vous ~ ( ̄▽ ̄) ~
Combien devez-vous atteindre? Les conditions spécifiques sont les suivantes :
1. Elle doit être sous le système d'héritage et une transformation vers le haut a eu lieu
2 La sous-classe doit réécrire la méthode de la classe parent
3 Appelée via la référence de la classe parent Réécriture. méthode
Certains nouveaux concepts impliqués dans ce qui précède seront présentés en détail ci-dessous
Nous modifions la classe écrite précédemment :
class Plant { String name; String source; String genu; public void func() { System.out.println("父类方法"); } } class Tree extends Plant { public void trait() { System.out.println("子类方法"); } }
La soi-disant transformation vers le haut consiste à créer une classe enfant. objet, utilisez-le comme classe parent
L'opération spécifique est la suivante :
Plant tree=new Tree();
Parce qu'il est utilisé comme classe parent, l'arbre ne peut pas appeler la méthode de la sous-classe pour le moment
Il y a une transformation vers le bas en Java, mais comme la transformation vers le bas n'est pas sûre, nous l'ignorons
L'exemple ci-dessus est le premier : affectation directe
De plus, il existe deux formes
comme paramètres de méthode
Comme valeur de retour de la méthode
La classe est toujours modifiée :
class Plant { String name; String source; String genu; public void trait() { System.out.println("父类方法"); } } class Tree extends Plant { @Override //注解,此注解可以进行一些合法性校验 public void trait() { System.out.println("子类方法"); } }
Regardons le résultat de l'appel du trait après la transformation vers le haut :
C'est la méthode de la sous-classe qui est appelée, et c'est aussi la caractéristique de la réécriture
En fait, lors de la compilation, c'est bien la méthode de la classe parent qui est appelée, mais la méthode surchargée détermine laquelle méthode à appeler pendant la phase d'exécution (c'est-à-dire la liaison dynamique) C'est aussi la différence essentielle entre la réécriture et la surcharge
3.1 Précautions pour la réécriture
2 . Méthodes de sous-classe Les droits d'accès doivent être supérieurs ou égaux à la classe parent
3 Après JDK7, le type de valeur de retour de la méthode remplacée peut être différent, mais elle doit avoir une relation parent-enfant, qui est un type covariant.
4. N'appelez pas la méthode surchargée dans la méthode constructeur
Le dernier point est expliqué séparément : Supposons que le constructeur de la classe parent appelle la méthode surchargée, car le constructeur de la sous-classe appellera d'abord le constructeur du parent. classe, donc l'objet de la sous-classe est dynamique avant d'être complètement construit. La liaison appelle la méthode réécrite. Dans ce cas, la probabilité de problèmes de programme augmentera considérablement. Après avoir compris la transformation ascendante et la réécriture, vous savez essentiellement comment implémenter le polymorphisme. en Java : combiner la transformation ascendante sous le système d'héritage La transformation et la réécriture atteignent le polymorphisme
.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!