当您有一个实现了方法行为的抽象类以及没有实现任何行为时,方法调用的顺序是什么?
假设我的抽象类称为 Abs,它有两个子类,Sub1 和 Sub2
在案例 1 中,Abs 包含方法 Meth1 的实现代码
public abstract class Abs{
public void Meth1(){
//Some code
}
}
在一个完全不同的类中,我有方法:
MyMethod(Abs a){
a.Meth1();
}
我通过 Sub1 或 Sub2 代替 Abs
在案例 2 中,Abs 不包含实现代码(但 Sub1 和 Sub2 包含)
public abstract class Abs{
public abstract void Meth1();
}
我叫同样的:
MyMethod(Abs a){
a.Meth1();
}
在传入 Sub1 或 Sub2 之后。
在每种情况下,方法调用的顺序是什么?它总是先到超类 Abs 然后再到子类吗?是不是先去子类,因为sublclass是作为参数传入的,然后JVM会检查子类中是否提供了实现代码,如果没有,如果有实现代码就调用超类方法?