recherche

Maison  >  Questions et réponses  >  le corps du texte

java - 当在子类中声明一个父类中存在的变量后,自动调用的父类构造函数不起作用。

高洛峰高洛峰2806 Il y a quelques jours571

répondre à tous(3)je répondrai

  • ringa_lee

    ringa_lee2017-04-18 10:48:33

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

    1

    2

    3

    4

    5

    6

    7

    <code>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;</code>

    • 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

    répondre
    0
  • 黄舟

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

    répondre
    0
  • PHP中文网

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

    répondre
    0
  • Annulerrépondre