关于java基类方法继承的一点疑问
1:java中以继承为核心的多态是通过运行时动态绑定来实现的,请问虚拟机在动态绑定的时候是按照怎样的顺序讲主对象与方法绑定在一起的?比如:
class Father {
public void f(){
System.out.println("father's f()");
}
}
public class OverRide extends Father{
public void f(){
System.out.println("son's public override");
}
public static void main(String[] arg){
Father fa = new OverRide();
fa.f();
}
}
在上述代码中虚拟机是怎么实现绑定的?是先搜搜子类方法然后再搜索父类方法么?
2:关于private方法覆盖的问题。。比如:
public class Father {
private void f(){
System.out.println("father's f()");
}
public static void main(String[] arg){
Father fa = new OverRide();
fa.f();
}
}
class OverRide extends Father{
public void f(){
System.out.println("son's public override");
}
}
为什么虚拟机无法绑定到子类方法??
唉。。。以前java一直只学了个半吊子,现在打算重新系统的来学习一下~~先多谢各位了!!
------解决方案--------------------先要知道多态的三个必要条件,一要有继承,二要有重写,三要有父类引用指向之类对象,当多态的时候,虽然调用的是父类里面的方法,但是实质上还是调用你指向的那个子类里面的已经重写的方法,注意的是这个方法必须和父类里面的需要重写的方法完全一致在public和static以及返回值这方面,在内存图中jvm已经指向了你需要的子类方法,这个你可以上网搜索多态以及重写的相关文档,
至于private,这个是私有方法,子类是获取不到的,也就是子类即使写的一样,但是还是不属于重写,就是说他们两个方法已经没有任何的关系了,这个你google也是可以搜到相关的对你有用的文档,