Java笔记总结(二十二)---动态绑定机制

本文通过一个Java代码示例,详细解释了对象方法调用时的动态绑定机制以及对象属性访问时的静态绑定。在子类覆盖父类方法后,调用父类引用的子类对象方法会根据实际类型执行相应的方法。而属性访问则遵循声明位置,不具有动态绑定,导致不同结果。
摘要由CSDN通过智能技术生成
  • 当调用对象方法时,该方法会和该对象的内存地址/运行类型绑定;
  • 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用;

父类

public class C {
    public int i =10;

    public int getI() {
        return i;
    }

    public int sum(){
        return getI()+10;
    }

    public int sum1(){
        return i+10;
    }
}

子类

public class D extends C{
    public int i =20;

    public int getI() {
        return i;
    }

    public int sum(){
        return getI()+20;
    }

    public int sum1(){
        return i+10;
    }
}

调用类

public class T {
    public static void main(String[] args) {
        C d = new D();//父类指向子类
        System.out.println(d.sum());
        System.out.println(d.sum1());
    }
}

输出结果:
40
30

在子类中把sum方法注释,运行调用类;
因为子类中没有sum方法,就继续向父类中查找sum方法,sum方法中是return getI()+10;
getI()方法在子类和父类中都有,所以先去子类中查找,返回i=20,再加上10;
d.sum()返回结果应该是30;
在子类中把sum1方法注释,运行调用类;
因为子类中没有sum1方法,所以去父类中查找,父类的sum1方法返回的是return i+10;
属性没有动态绑定机制,哪里声明就在哪里使用,所以i=10,加上10,结果=20;
d.sum1()返回结果是20;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值