java - 当在子类中声明一个父类中存在的变量后,自动调用的父类构造函数不起作用。
高洛峰
高洛峰 2017-04-18 10:46:33
0
3
549
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(3)
左手右手慢动作

La séquence d'exécution est la suivante :

1. super();
1.1. super.i = 7;
1.2. this.setI(20) => this.i = 60;
1.3. System.out.println("i from a is " + super.i) => 7;
2. this();
2.1. this.i = 10;
2.2. System.out.println("i from b is " + this.i) => 10;
  • 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

    .

Après avoir supprimé

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

黄舟

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.

Ty80

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...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal