Объяснение этого метода? - PullRequest
0 голосов
/ 04 июня 2018
public class A {
    public void method1() {
        System.out.print(" A1");
    }

    public void method2() {
        method1();
        System.out.print(" A2");
    }
}

public class B extends A {
    public void method2() {
        super.method2();
        System.out.print(" B2");
    }

    public void method1() {
        System.out.print(" B1");
    }
}

public class B2 {
    public static void main(String args[]) {
        B b = new B();
        b.method2();
    }
}

Почему method1() вызывает внутри класса A method2() вызов method1() класса B вместо method1() класса A?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

method1 () из класса B вызывается, потому что ссылка this указывает на объект типа B () при вызове

0 голосов
/ 04 июня 2018

При взгляде на код super.method2() просто вызывает method2() из класса A.

Так что попробуйте все упростить, сделав замену копированием и вставкой;таким образом класс B становится:

public class B extends A {
    public void method2() {
        method1();
        System.out.print(" A2");
        System.out.print(" B2");
    }

    public void method1() {
       System.out.print(" B1");
    }
}

Здесь вы можете ясно видеть, что при запуске строки b.method2() она будет работать в порядке сверху вниз:

  1. method1() - Это напечатает «B1»
  2. Печать «A2»
  3. Печать «B2»

Надеюсь, это объясняет немного больше.

0 голосов
/ 04 июня 2018

method1() класса B переопределяет method1() класса A, поэтому вызов method1() для экземпляра с типом среды выполнения B выполнит method1() класса B.Неважно, что вызов method1() выполняется из метода класса A.

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