当我们子类继承了父类,并将父类中的方法重写,如果我们使用向上转型调用父类中重写的方法。那么是调用父类 or子类?
package reuse.extend;
class Amphibian {//两栖动物
void life(){
System.out.println("Amphibian life");
}
}
public class Frog extends Amphibian{
@Override
void life() {
System.out.println("Forg life");
super.life();
}
public static void main(String[] args) {
Amphibian amphibian = new Frog();
amphibian.life();
}
}
输入结果:
Forg life
Amphibian life
1、很显然是调用了子类重写之后的方法。从表面看上去,向上转型之后指向父类的引用,当然调用父类的方法,然而编译器并不是这样处理的!至于为什么呢?假设向上转型之后只是调用父类的方法,我们知道如果子类可以直接可以掉用重写的方法的,感觉没什么影响。希望对这方法有了解的,帮忙解释一下,谢谢!
2、如果基类方法被私有,即使被子类重写,向上转型之后调用重写方法,则只会调用基类的私有方法。