这是我的问题。我有一个抽象方法的超类。调用子类对象的抽象方法
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对象,并将其视为Base对象,然后它从Base对象转到foo,并且看到没有实现,然后它从孩子检出foo,然后它看到方法foo是在那里实施,所以它显示的消息。我对吗?
在编译Base时,运行时对象是一个子对象。在运行时对象上调用方法。 –
请参考[Abstract Classes documentation](http://stackoverflow.com/documentation/java/87/inheritance/397/abstract-classes#t=20160916155332004042)。 – Jonathan
谢谢大家,所以调用运行时对象方法foo而不是基类方法foo,因此编译器不会抱怨它。 – MohsenFM