• Java基础学习——动态绑定机制


    1.继承
    Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。Java继承使用关键词extends实现,Java继承分为单继承和多层继承。单继承是指一个子类最多只能有一个父类。多重继承是一个子类可以有二个以上的父类。Java一次只能继承一个父类。

    单继承

    A extends B

    多层继承

    A extends B extends C

    Java没有多继承

    A extends B,C (这是错误的)

    2.动态绑定机制
    当调用对象方法的时候,该方法会和对象的内存地址/运行类进行绑定
    当调用对象属性的时候,是没有动态绑定机制的,谁声明,谁使用
    案例讲解:

    创建一个父类A

    //创建父类class A {//父类 public String i = 10; public int sum() { return getI() + 10; } public int sum1() { return i + 10; } public int getI() { return i; }}
    创建一个子类B继承父类A

    class B extends A {//子类 public int i = 20; public int sum() { return i + 20; } public int sum1() { return i + 10; } public int getI() { return i; }}
    创建主方法,在主方法中分别调用sum()方法和sum1()方法

    public static void main(String[] args) { //编译看左边,运行看右边 A a = new B();//向上转型 System.out.println(a.sum());//40 System.out.println(a.sum1());//30 }/结果解读:对于sum()方法:编译看左边A,左边父类中有sum()方法;运行看右边B,子类中也有sum()方法,此时调用子类中的sum()方法,结果为20+20=40;同理,对于sum1()方法,结果为20+10=30。/
    将子类中sum()方法和sum1()方法注释:

    class B extends A {//子类 public int i = 20; public int getI() { return i; }}
    继续在主方法中调用sum()和sum1()方法

    public static void main(String[] args) { //编译看左边,运行看右边 A a = new B();//向上转型 System.out.println(a.sum());//30 System.out.println(a.sum1());//20 }/结果解读:对于sum()方法:编译看左边A,左边父类中有sum()方法;运行看右边B,子类中现在没有sum()方法,在编译父类A中sum()方法时,发现其调用了getI()方法,而根据Java的动态绑定机制(当调用对象方法的时候,该方法会和对象的内存地址/运行类进行绑定),即此时调用的getI()方法是子类中的getI()方法,而不是父类中的getI()方法。又因为属性没有动态绑定机制,哪里声明,哪里使用。即i的值为子类中i的值。所以结果为20+10=30;同理,对于sum1()方法,结果为10+10=20。/

  • 相关阅读:
    文件真实类型识别 - linux c file
    pandas某一列的某一行 .loc
    Angular 服务器端渲染应用的开箱即用的缓存功能问题
    永恒之蓝漏洞原理及复现
    代码冲突的产生以及解决方式
    MySQL数据库之备份与恢复
    【设计模式】(二、)设计模式六大设计原则
    第三部分—数据结构与算法基础_3. 受限线性表
    自用工具类整理
    IObit Unlocker丨解除占用程序软件
  • 原文地址:https://blog.csdn.net/m0_54850604/article/details/125627958