Пояснение: полиморфного вызова методов не происходит, поскольку сигнатуры void m(Number n) и void m(Double d) отличаются. Тот факт, что Double наследник Number не играет никакой роли.
Переменная a имеет тип A. Поэтому по a.m() может вызываться только метод, который присутствует в классе A (или, конечно, его перекрытый вариант из B).
В классе A есть только один метод с именем m. Поэтому, если и будет вызываться, то только метод с сигнатурой m(Number).
Теперь посмотрим на класс B. Тут тоже есть метод с именем m, но у него другой (!) набор параметров. Следовательно, он не перекрывает (override) исходный метод.
Получается, что в этом примере может быть вызван только метод A.m(Number).
Осталось проверить, что в этот метод можно передать наш параметр (не будет ли где-нибудь ошибки компиляции?) и рассчитать, сколько будет 5/3.
Войдите чтобы поставить Нравится
Войдите чтобы прокомментировать