Java - запутался в конкретном сценарии наследования - PullRequest
0 голосов
/ 07 марта 2012

Скажем, у меня есть класс с именем A, а в A есть метод с именем myMethod().Теперь скажите, что я делаю подкласс A, называемый SubA, а в SubA я переопределяю myMethod(), чтобы он делал то, что я хочу.Теперь скажите, что у меня есть другой метод в A, называемый myOtherMethod(), который вызывает myMethod() (из того же класса).Я не переопределяю myOtherMethod() в SubA.Если я сейчас позвоню myOtherMethod() изнутри SubA, он явно запустит myOtherMethod().Но вызывает ли это теперь myMethod(), как определено в A, или как определено (и переопределено) в SubA?

Чтобы еще больше сбить с толку, имеет ли значение вообще, был ли myMethod() интерфейсным методом для некоторогоИнтерфейс, который реализован в классе A?

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Это легко попробовать - тот факт, что A реализует интерфейс или нет, не имеет значения:

public class A {

    public void myMethod() {
        System.out.println("A.myMethod()");
    }

    public void myOtherMethod() {
        System.out.println("A.myOtherMethod()");
        myMethod();
    }

    public static class SubA extends A {

        @Override
        public void myMethod() {
            System.out.println("SubA.myMethod()");
        }
    }

    public static void main(String[] args) {
        A a = new A();
        SubA subA = new SubA();
        a.myMethod(); //A.myMethod()
        subA.myMethod(); //SubA.myMethod()
        a.myOtherMethod(); //A.myOtherMethod() + A.myMethod()
        subA.myOtherMethod(); //A.myOtherMethod() + SubA.myMethod()
    }

}
1 голос
/ 07 марта 2012

Если вы создаете экземпляр SubA, то вызов метода myOtherMethod() (который находится в A) вызывает метод myMethod(), определенный в SubA, поскольку он переопределяет метод, определенный в A.

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