文章目录

  • Java重要特性:动态绑定机制
    • 案例1(引入)
    • 案例2(动态绑定机制-调用对象方法)
    • 案例3(动态绑定机制-调用对象属性)

Java重要特性:动态绑定机制

案例1(引入)

public class DynamicBinding {public static void main(String[] args) {A a = new B();System.out.println(a.sum()); //40System.out.println(a.sum1());   //30}
}
class A {public int i = 10;public int sum(){return getl() + 10;}public int sum1(){return i + 10;}public int getl(){return i;}
}class B extends A{public int i = 20;public int sum(){return i + 20;}public int getl(){return i;}public int sum1(){return i + 10;}
}

A a = new B();是向上转型,调用方法看运行类型
a.sum()和a.sum1()分别输出40和30,这一点毫无疑问

案例2(动态绑定机制-调用对象方法)

如果把上述子类中的sum()注释掉,结果会有什么不同?

public class DynamicBinding {public static void main(String[] args) {A a = new B();System.out.println(a.sum());System.out.println(a.sum1());}
}
class A {public int i = 10;public int sum(){return getl() + 10;}public int sum1(){return i + 10;}public int getl(){return i;}
}class B extends A{public int i = 20;
//    public int sum(){//        return i + 20;
//    }public int getl(){return i;}public int sum1(){return i + 10;}
}

这个时候a.sum()访问子类,发现子类中没有sum方法,再去访问父类,父类中有sum方法,调用的过程中getl()出现了分歧,父类和子类中都有getl(),该调用哪一个?
这里就体现出java的动态绑定机制

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

所以该案例中的a.sum()和a.sum1()分别输出30和30

案例3(动态绑定机制-调用对象属性)

接着把子类中的sum1()注销

public class DynamicBinding {public static void main(String[] args) {A a = new B();System.out.println(a.sum());System.out.println(a.sum1());}
}
class A {public int i = 10;public int sum(){return getl() + 10;}public int sum1(){return i + 10;}public int getl(){return i;}
}class B extends A{public int i = 20;
//    public int sum(){//        return i + 20;
//    }public int getl(){return i;}
//    public int sum1(){//        return i + 10;
//    }
}

根据案例2中对动态绑定机制的描述,很容易分析出
a.sum()和a.sum1()分别输出30和20

java的动态绑定机制相关推荐

  1. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制

    目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...

  2. 【java】动态绑定机制

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

  3. java的多态和动态绑定机制

    什么是多态,多态具体体现在哪些方面? 多态:方法或者对象具有多挣形态,是OOP的第三大特征,是建立在封装和继承期初之上的多态具体表现, 1.方法多态 (1)重载体现多态, (2)重写体现多态 2.对象 ...

  4. Java动态绑定机制详解

    关于 java 的动态绑定机制 聊一聊动态绑定机制, 相信看完这篇文章,你会对动态绑定机制有所了解. 网上大多一言概括: 当调用对象的时候,该方法会和该对象的内存地址/运行类型绑定. 当调用对象的属性 ...

  5. Java动态绑定机制的内幕

    在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto ...

  6. java 动态绑定原理_详解Java动态绑定机制的内幕(图)

    在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto ...

  7. JAVA多态的动态绑定机制

    对于多态,大家基本上都很熟悉,日常开发用的也挺多,一句话概括:父类引用指向子类对象 在集合的使用上,List mList = new ArrayList<>(); 在类的继承时,Anim ...

  8. JAVA动态绑定机制

    JAVA动态绑定机制(非常非常重要) JAVA动态绑定机制:动态绑定是与运行类型进行绑定 1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型(也就是与运行类型)绑定(意思就是如:有一个Ca ...

  9. java的动态绑定是什么意思_Java的动态绑定机制

    Java的动态绑定又称为运行时绑定.意思就是说,程序会在运行的时候自动选择调用哪儿个方法. 一.动态绑定的过程: 例子: public class Son extendsFatherSon son = ...

最新文章

  1. sql server和mysql分页查询_sql server和mysql中分别实现分页功能
  2. 姗姗来迟的Serverless如何助力微服务和DevOps
  3. 【转】mysql,mysqli,PDO三种方式连接数据库
  4. jQuery 一次定时器_年薪百万之路--第五十一天 jQuery(上)
  5. 软件测试遇到的异常情况,豪之诺软件测试项目开发中遇到比较多的Bug总结
  6. 前端学习(1341):mongoose验证规则延伸
  7. 解析OpenShift的存储规划
  8. 云原生应用程序_什么是云原生应用程序?
  9. python3带tkinter窗口的ftp服务器,并使用pyinstaller打包成exe
  10. Objective-C中的单例模式
  11. 亚马逊平板刷机Linux系统,亚马逊平板刷机步骤是什么样的?
  12. Numpy安装、升级与卸载
  13. C# 合并多个PDF
  14. 360 极速模式 css,请问 chrome 和 360 极速模式 渲染页面不一样
  15. js日期加横杆_JS 替换日期的横杠为斜杠
  16. 关于滚动条内子控件控制问题
  17. Excel调用有道词典实现批量翻译
  18. js实现监听键盘的收起和弹出
  19. 【SolidWorks】模型状态显示设置介绍
  20. bp神经网络原理 实现过程,BP神经网络的实现包括

热门文章

  1. Squish简介——跨平台自动化GUI测试工具
  2. Checkm安装使用教程
  3. 传奇手游腾讯服务器和微信哪个好,传奇手游:对于传奇老玩家来说,玩的是氪金PK还是坚持情怀?...
  4. 谈谈CListCtrl 扩展风格设置方法-SetExtendedStyle和ModifyStyleEx 比較
  5. STM32 USART—串口通信
  6. int转String(精)
  7. Zotero插件Zotfile下载与安装
  8. 计算机函授本科学制,成人高考函授本科是什么,函授本科要多久毕业?函授学制是几年的?...
  9. codepen_CodePen技巧和最佳实践
  10. 从入门到冠军 中国移动人群画像赛TOP1经验分享