супер идет только на один уровень выше? - PullRequest
0 голосов
/ 19 марта 2019

если у меня есть:

class Zero {
    int n = 0;

    void setN(int x) {
        n += x;
    }
}

class One extends Zero {
    int n = 1;

    void setN(int x) {
        n += x;
        super.setN(x);
    }

}

class Two extends One {
    int n = 2;

    void setN(int x) {
        n += x;
        super.setN(x);
    }

    void show() {
        System.out.println(n);
        System.out.println(super.n);
        // System.out.println(super.super.n);   error

    }

    public static void main(String[] args) {
        Two two = new Two();
        two.show();
        // >>>
        // 2
        // 1

        two.setN(1);
        two.show();
        // >>>
        // 3
        // 2
    }
}

Я отредактировал его с помощью метода setN передать от Zero.Это сработало, значит ли это, что я все еще могу «изменить» n в Zero, но я просто не увижу его?

Также очень интересно, чтохотя setN точно так же в One и Two, я должен вручную переопределить его, если я удаляю setN в Two, это будет вести себя по-другому.setN не изменится n в Two.

Кажется, что super может пройти только на один уровень выше?Можно ли в любом случае вызвать n в нуле?

Но другой вопрос заключается в том, что, если я намеревался переопределить int n в подклассе, почему это вообще позволяет мне посещать n в родительском?

Спасибо,

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Однако вы можете сделать это в Two.main ():

   Two two = new Two();
   Zero z = (Zero)two;
   System.out.println( Zero's n is " + z.n );
1 голос
/ 20 марта 2019

Это не возможно в Java в отличие от C ++, который поддерживает его с использованием разрешения области.

Вы можете иметь метод

int getZeroN(){
    return n;
}

в вашем Zero и затем вызывать его, используя System.out.println(super.getZeroN());от Two

0 голосов
/ 19 марта 2019

Вы не можете подняться на два уровня вверх с super. Может использоваться и с аргументами. как super(argument1) и вызовет конструктор, который принимает 1 параметр типа argument1 (если существует).

Также его можно использовать для вызова методов родителя. super.method()

для получения дополнительной информации вы можете обратиться здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...