Java的动态绑定机制
Java的动态绑定机制
- 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
- 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
看案例:
public class Dynamic {
public static void main(String[] args) {
Animal cat = new Cat();
cat.action();//小猫吃鱼,动态绑定看new的对象的运行类型和内存地址
}
}
class Animal{
private int age;
//创建eat方法
public void eat(){
System.out.println("动物进食");
}
//创建方法,调用eat方法
public void action(){
eat();
}
}
class Cat extends Animal{
private String name;
//重写eat方法
public void eat(){
System.out.println("小猫吃鱼");
}
public void action(){
eat();
}
}
运行结果:
-
如果将Cat类中的eat方法注释了,结果如何?
本类中找不到eat方法,就向父类去调用eat方法,运行结果:
-
如果Cat类的action方法注释了,结果如何?
本类中找不到action方法,向父类调用action方法,action方法中又调用了eat方法,但是此时调用的可不是父类的eat方法,由动态绑定机制 方法会和该对象的内存地址/运行类型绑定 此时对象的运行类型是Cat所以又去调用了Cat的eat方法,运行结果: