Maison > Questions et réponses > le corps du texte
ringa_lee2017-04-18 10:48:33
La séquence d'exécution est la suivante :
1 2 3 4 5 6 7 |
|
A.i
et B.i
sont tous deux privés de package, B.i
n'a pas de remplacement A.i
, les deux sont indépendants
A.setI
et B.setI
sont tous deux publics, B.setI
Override A.setI
, ce que A appelle pendant la construction est B.setI
;
L'initialisation du membre de B en dehors du constructeur est exécutée après que super()
soit d'abord défini à 60 par B.i
en super, puis défini à 10 par l'initialisation du membre de B ;B.setI
dans B, si A et B sont dans le même package, int i = 10;
accédera à B.setI
, et il n'y aura aucun changement une fois que A.i sera réglé sur 60 pendant super(), et ce sera être imprimé deux fois. Les deux ont 60 ansA.i
黄舟2017-04-18 10:48:33
Si je déclare un membre dans la sous-classe qui existe déjà dans la classe parent, n'y aura-t-il pas d'erreur ? Cela devrait au moins être un avertissement.
Je peux seulement dire que la question est trop méchante. Il est impossible d’écrire ainsi dans le développement réel. Vous allez vous creuser un trou.
PHP中文网2017-04-18 10:48:33
7.10
1. Accédez à la méthode de construction de A et terminez la construction des paramètres vides de l'objet.
2.int I=7
3.setI(20) appelle le setI() de la sous-classe À ce stade, le I de la sous-classe est de 60 et le I de la classe parent est toujours de 7.
4.Imprimez ceci .i vaut 7 dans la classe parent à ce moment-là ; (remarque : la variable dépend de l'appelant réel, il s'agit de la classe parent actuelle ; la méthode est appelée la sous-classe car elle a été remplacée)
5.int I=10 écrase le 60 original.
6, imprime ceci.i Cette fois, c'est 10.
60.60
Remarque : Si vous supprimez le I de la sous-classe, le I de la classe parent est appelé par défaut
3 Appelez setI de la sous-classe et attribuez-le à la classe parent. la classe parent passe à 60.
5 Il n'y a pas de remplacement pour le moment, this.i appelle par défaut le I hérité de la classe parent, qui est 60.
Sur l'importance de Degbug...