Java动态绑定机制

本文探讨了Java中的动态绑定机制,特别是在多态场景下的应用。通过实例解释了对象方法的动态绑定,强调成员变量没有动态绑定,以及在向上转型和向下转型时的方法调用规则。总结了动态绑定的关键点:调用对象方法时,方法绑定到运行时类型;成员变量则按声明位置使用。
摘要由CSDN通过智能技术生成

Java中的多态是面向对象编程的重要特性之一。
最近复习Java基础,发现自己忽略了多态中的动态绑定机制。
确实比较绕,记录于此加深理解,希望对大家也有帮助。
参考了韩顺平老师的零基础学Java,讲得非常细,B站链接:https://www.bilibili.com/video/BV1fh411y7R8?p=315


一、简单回顾下Java多态:

  • 方法的多态:重载和重写

  • 对象的多态:编译看左,运行看右

    • 例:Animal animal = new Dog();
    • 编译类型:Animal
    • 运行类型:Dog
  • 向上转型:父类引用指向子类对象

    • 父类类型 引用名 = new 子类类型()
    • 可以调用父类成员,需遵守访问权限(无法直接访问父类中private修饰成员)
    • 向上转型后,不能调用子类特有成员,因为编译类型是父类,调用子类特有成员无法通过编译
  • 向下转型:调用子类特有的成员

    • 子类类型 引用名 = (子类类型) 父类引用
    • 向下转型后,编译类型和运行类型都是子类,因此可以调用子类所有成员
    • 父类引用必须指向的是当前目标类型的对象
    // Cat Dog 分别继承 Animal
    Animal animal = new Cat();  // 向上转型
    Cat cat = (Cat) animal;     // 向下转型
    Dog dog = (Dog) animal;     // 编译成功,但运行报错,类转换异常
    

二、动态绑定机制——简要版

  • 当调用对象方法时,该方法会和该对象的内存地址/运行类型绑定
  • 当调用对象成员变量时,没有动态绑定机制,哪里声明,那里使用

三、动态绑定机制——详解
1a. 父类、子类定义如下

class Father {
   
    public int num = 10;

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

    public int sum2() {
   
        return num + 10;
    }

    public int getNum(
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值