Java的动态绑定机制

Java的动态绑定机制

  1. 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
  2. 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用

看案例:

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();
    }
}

运行结果:
小猫吃鱼

  1. 如果将Cat类中的eat方法注释了,结果如何?
    本类中找不到eat方法,就向父类去调用eat方法,运行结果:
    动物进食

  2. 如果Cat类的action方法注释了,结果如何?
    本类中找不到action方法,向父类调用action方法,action方法中又调用了eat方法,但是此时调用的可不是父类的eat方法,由动态绑定机制 方法会和该对象的内存地址/运行类型绑定 此时对象的运行类型是Cat所以又去调用了Cat的eat方法,运行结果:
    小猫吃鱼

posted @ 2022-12-09 15:18  凉白茶  阅读(70)  评论(0编辑  收藏  举报