Вот мой вопрос. У меня суперкласс с абстрактным методом.вызов абстрактного метода из объекта подкласса
public abstract class Base{
public abstract Boolean foo();
}
public class sub extends Base{
@Override
public Boolean foo(){
System.out.printLn("This is foo in the sub class!");
}
}
так Когда я иду в основной и попробовать этот код
Base b = new sub();
b.foo();
Я не получил сообщение об ошибке и сообщение показывает на моем экране. Мое предположение заключается в том, что компилятор просматривает объект b и видит его как базовый объект, затем он переходит к foo из базового объекта и видит, что нет реализации после этого, он проверяет foo от дочернего элемента и затем видит метод foo реализован там, чтобы он показывал сообщение. Я прав?
Пока вы скомпилируете базу, объект времени выполнения является вспомогательным. Метод вызывается на объект времени выполнения. –
См. [Документация по абстрактным классам] (http://stackoverflow.com/documentation/java/87/inheritance/397/abstract-classes#t=20160916155332004042). – Jonathan
Спасибо, ребята, поэтому метод объекта времени исполнения foo вызывается, а не метод базового класса foo, поэтому компилятор не жалуется на это. – MohsenFM