Вызывает ли метод вызов типа класса или типа экземпляра? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть два класса: A и B, и B является подклассом A (B расширяет A).Класс A содержит метод: doSomething (), а класс B переопределяет этот метод с помощью doSomething ().Если я объявлю переменную = new B ();и затем я вызываю variable.doSomething (), на какой класс он будет ссылаться?

class A {
    public void doSomething() {
        System.out.println("classA");
    }
}
class B extends A {
    public void doSomething() {
        System.out.println("classB");
    }
}

A variable = new B();
variable.doSomething();
//Will this print "classA or classB"?

1 Ответ

0 голосов
/ 18 мая 2019

Когда переопределенный метод вызывается через ссылку на суперкласс, Java определяет, какую версию этого метода выполнить, основываясь на типе объекта, на который ссылается во время вызова. Таким образом, это определение выполняется во время выполнения.

Это тип объекта, на который ссылаются (а не тип ссылочной переменной), который определяет, какая версия переопределенного метода будет выполняться.

A variable = new B();
variable.doSomething();
// Output: classB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...