я наткнулся на вопрос в последнее время на многоуровневом наследовании в Java, вопрос заключается в следующем:Многоуровневое Наследование в Java
public class Test{
public static void main(String[] args) {
A c = new C();
c.print();
}
}
class A{
public void print(){
System.out.println("Inside A");
}
}
class B extends A{
@Override
public void print(){
System.out.println("Inside B");
}
}
class C extends B{
}
Так что мой вопрос, почему это печать, как «Внутри B». Поскольку класс C не переопределяет метод print(), и поэтому он должен разрешить метод, основанный на времени компиляции, и, следовательно, должен печатать «Внутри A». Пожалуйста, дайте мне знать, если я ничего не пропущу. Спасибо за помощь.
_it должен разрешить метод, основанный на компиляции time_ - это false – GriffeyDog
Класс B переопределяет класс A, поэтому теперь будет вызываться метод класса B. Класс C расширяет B не A, он будет вызывать последний метод overriden, а не оригинал. Следовательно, вызывается метод печати класса B. Если класс C не отменяет метод печати, по умолчанию будет использоваться последний метод переопределения, который является методом печати класса B. –
Почему вы думаете, что 'C' должен пропустить метод переопределения своего прямого родителя и вместо этого использовать один из его« дедушек »? – Tom