java中的动态绑定机制
本文主要讲述java中的动态绑定机制。
老韩ppt关于动态绑定机制:

示例代码如下:
public class DynamicBinding {
public static void main(String[] args) {
A a = new B();
// 编译时是A类,运行时是B类。
System.out.println(a.sum()); // 40
System.out.println(a.sum1()); // 30
}
}
class A {
public int i = 10;
public int getI(){
return i;
}
public int sum(){
return getI() + 10;
}
public int sum1(){
return i + 10;
}
}
class B extends A {
public int i = 20;
public int sum(){
return i + 20;
}
public int getI(){
return i ;
}
public int sum1(){
return i + 10;
}
}
运行结果:

若将B中的sum()和sum1()方法注释:
public class DynamicBinding {
public static void main(String[] args) {
A a = new B();
// 编译时是A类,运行时是B类。
System.out.println(a.sum()); // 30
System.out.println(a.sum1()); // 20
}
}
class A {
public int i = 10;
public int getI(){
return i;
}
public int sum(){
return getI() + 10;
}
public int sum1(){
return i + 10;
}
}
class B extends A {
public int i = 20;
// public int sum(){
// return i + 20;
// }
public int getI(){
return i ;
}
// public int sum1(){
// return i + 10;
// }
}
运行结果如下:

原因:
A a = new B();
编译阶段,a是A类,运行阶段,a是B类。当B中的sum()方法和sum1()方法注释时,
a.sum(),首先在B类中查找sum()方法,发现没有,接着在B的父类A中继续查找sum()方法,但是在A类的sum()方法中有getI()方法,此时A类有getI()方法,与B中的getI()方法有重写关系,此时应该调用哪个getI()方法呢?应该调用B中getI()方法,返回B类的成员变量 i = 20。
a.sum1(),首先在B类中查找sum1()方法,发现没有,接着在B的父类A中继续查找sum()1方法,由于sum1()中运用属性i,根据就近原则,这里的i即为A中的成员变量 i = 10。
引入动态绑定机制的概念:
1.当调用对象方法时,该方法会与【运行类型】对象的内存地址绑定。
2.当调用属性时,没有动态绑定机制,哪里声明,哪里使用。
java中的动态绑定机制的更多相关文章
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- java中wait/notify机制
通常,多线程之间需要协调工作.例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕.如果图片还没有下载完,d ...
- 浅说Java中的反射机制(二)
写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...
- 浅说Java中的反射机制(一)
在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...
- 【Java】深入理解Java中的spi机制
深入理解Java中的spi机制 SPI全名为Service Provider Interface是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用 ...
- 【Java基础】java中的反射机制与动态代理
一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...
- 【夯实基础】- Java中的fail-fast机制
转载自:Java中的fail-fast机制 遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过普通的for删除删除符合条件 ...
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- 结合实战和源码来聊聊Java中的SPI机制?
写在前面 SPI机制能够非常方便的为某个接口动态指定其实现类,在某种程度上,这也是某些框架具有高度可扩展性的基础.今天,我们就从源码级别深入探讨下Java中的SPI机制. 注:文章已收录到:https ...
- JAVA中关于锁机制
本文转自 http://blog.csdn.net/yangzhijun_cau/article/details/6432216 一段synchronized的代码被一个线程执行之前,他要先拿到执行这 ...
随机推荐
- 巧用VBA实现:基于多个关键词模糊匹配Excel多行数据
在用Excel处理实际业务中,我们会碰到如下场景: 1.从一堆人名中找到包含某些关键字的名字: 2.从银行流水文件中根据[备注]字段找到包含某些关键字的,统一识别为[手续费业务]等. 这本质说的都是一 ...
- 编写一个jsp页面,利用Scriptlet编写一段计算代码,要求用零作为除数,并使用page指令将错误信息显示在另外一个jsp页面,产生的错误信息为“错误,不能用0做除数”
文章目录 1.测试结果: 2.结果计算页面 3.错误处理页面 1.测试结果: 2.结果计算页面 <%@ page language="java" contentType=&q ...
- 十一、Pod的健康检查-探针
Pod 的健康检查-探针 一.Pod 的健康检查-探针 1.1.探针基本概念 探针是由 kubelet 对容器执行的定期诊断.要执行诊断,kubelet 调用由容器实现的 Handler 有三种类型 ...
- 基于LZO的高性能无损数据解压缩IP
LZOAccel-D LZO Data Decompression Core/无损数据解压缩IP Core LZOAccel-D是一个无损数据解压缩引擎的FPGA硬件实现,兼容LZO 2.10标准. ...
- ES6学习笔记(十四)module的简单使用
1.前言 module模块机制是es6新引入的,它解决了作用域的问题,使代码更加规范和结构化. 下面简单的使用一下. 2.基本使用 2.1 模块和脚本的区别 模块代码运行在严格模式下,并且没有任何办法 ...
- SqlDataAdapter使用小结
SqlDataAdapter是 DataSet与SQL Server之间的桥接器,用于相互之间的数据操作. 使用方法 1. 通过查询语句 与 SqlConnection对象实现 string strC ...
- CSS布局秘籍(2)-6脉神剑
HTML系列: 人人都懂的HTML基础知识-HTML教程(1) HTML元素大全(1) HTML元素大全(2)-表单 CSS系列: CSS基础知识筑基 常用CSS样式属性 CSS选择器大全48式 CS ...
- idea中springboot热部署(无需重启项目)
idea中springboot热部署(无需重启项目) 1.在pom.xml文件中导入依赖 <dependency> <groupId>org.springframework.b ...
- 达梦-DBLINK数据库链接
aliases: [达梦 DBlink] tags: [数据库,DM,Blog] link: date: 2022-09-06 说明:DM-Oracle指的是在DM中创建链接至Oracle的Dblin ...
- Vue2学习笔记
1.插值语法: 1.1.功能: 用于解析标签体内容 1.2.写法: {{ xxx }},xxx是js表达式,且可以直接读取到data中的所有属性. 2.收集表单数据 若:<input type= ...