1. Puisque l'héritage est passé par référence, pourquoi la sous-classe remplace-t-elle les propriétés et les méthodes de la classe parent sans modifier les propriétés et les méthodes de la classe parent. Que signifie le transfert de référence hérité ? Dans quelles circonstances les méthodes membres et les propriétés membres de la classe parent seront-elles modifiées ?
2. Puisque les propriétés, méthodes et constantes statiques se trouvent dans la zone statique, pourquoi les propriétés et variables d'origine ne sont-elles toujours pas écrasées lorsqu'elles sont réécrites dans des sous-classes ?
3. La question nouvellement éditée - à propos de la zone statique - tout le monde sait qu'il n'y a que des variables membres dans l'objet objet, seules les adresses des méthodes membres dans le tas, les méthodes membres et les classes sont dans la zone de code. , et les méthodes membres statiques sont différentes des méthodes membres. Les méthodes membres statiques se trouvent dans la zone statique, les variables membres obj->static signaleront une erreur, tandis que les méthodes membres obj->static peuvent être appelées avec succès. Pourquoi ? Quelqu'un peut-il me parler de la relation entre la zone de code, la zone statique et les objets ? Merci beaucoup ! ! ! ! !
Aucune des réponses ci-dessus n’est pertinente. Baidu par vous-même : liaison tardive et liaison précoce ; jetez également un œil aux connaissances de tij sur l'héritage et le polymorphisme
Vous pouvez essayer de le comprendre de cette façon, l'héritage est passé par référence, la sous-classe est la classe parent héritée, et les propriétés et méthodes de la classe parent, alors toutes les propriétés et méthodes de la classe parent doivent être en mémoire.
Cependant, lorsque vous remplacez la méthode de la classe parent dans la sous-classe, cela équivaut en fait à déplacer le pointeur de la méthode a() de la classe parent vers le a() substitué de la sous-classe. ) de la classe parent existe toujours, et non Elle remplacera en fait la méthode a() de la classe parent de la mémoire.
Transmission de référence héritée : signifie qu'il n'y a qu'une seule copie du code de la classe parent dans la mémoire. Par exemple, l'adresse mémoire est 0x000010. Lorsque la sous-classe hérite, le code de la classe parent est lu directement à partir de cette adresse mémoire. Au lieu de recopier le code en mémoire.
Vous pouvez jeter un œil au mécanisme de liaison dynamique. La sous-classe et la classe parent formeront deux tables de méthodes distinctes et leurs types de données respectifs dans la zone des méthodes. . . Ne couvrira pas
Compréhension personnelle de l'héritage :
Les méthodes que possède déjà la classe parent, les sous-classes qui héritent de la classe parent les ont par défaut (méthodes et attributs). Cependant, les sous-classes peuvent choisir de surcharger les méthodes de la classe parent. Dans ce cas, lorsque la sous-classe appellera ces méthodes substituées, elle donnera la priorité à l'appel de la méthode modifiée par la sous-classe. La méthode de la classe parent sera appelée par défaut.
Quant à ce que l'affiche a dit à propos de l'héritage par référence, je pense personnellement que lors de l'héritage, ces méthodes et attributs pointent par défaut vers la classe parent. Cependant, lors de l'appel réel, il détectera si la sous-classe a remplacé les méthodes ou les attributs. de la classe parent. Si oui, l'appel réel pointera vers les méthodes et propriétés remplacées par la sous-classe. Sinon, il pointera toujours vers les méthodes et propriétés de la classe parent.
Humble avis personnel...
Une sous-classe est une classe parent héritée.La sous-classe peut hériter des attributs et des méthodes de la classe parent, mais elle ne peut pas changer la classe parent. La sous-classe n'a qu'une seule classe parent, mais la classe parent peut avoir plusieurs sous-classes. change le parent Les attributs et méthodes de la classe elle-même n'ont-ils pas besoin d'hériter à nouveau de nouvelles méthodes et attributs ? Il n'y a pas de solution. . .
Une sous-classe ne peut remplacer que la classe parent. Le code exécute d'abord la méthode dans la sous-classe et ne continue plus à exécuter la méthode remplacée de la classe parent.
L'héritage dans le langage PHP ne peut être hérité que de haut en bas et ne peut pas être annulé à l'envers
J'hérite des méthodes de la classe parent, ce qui équivaut à écrire toutes les méthodes de la classe parent dans ma classe. Quant aux méthodes qui entrent en conflit avec celles existantes, je ne les écris tout simplement pas. C'est-à-dire que si la classe parent l'a et ne l'a pas, alors elle sera héritée. Si la classe parent l'a, vous l'avez également, elle sera donc basée sur vous.