Java的动态绑定机制
Java的动态绑定又称为运行时绑定。意思就是说,程序会在运行的时候自动选择调用哪儿个方法。
一、动态绑定的过程:
例子:
public class Son extends Father
Son son = new Son();
son.method();
1. 首先,编译器根据对象的声明类型和方法名,搜索相应类(Son)及其父类(Father)的“方法表”,找出所有访问属性为public的method方法。
可能存在多个方法名为method的方法,只是参数类型或数量不同。
2. 然后,根据方法的“签名”找出完全匹配的方法。
方法的名称和参数列表称为方法的签名。
在Java SE 5.0 以前的版本中,覆盖父类的方法时,要求返回类型必须是一样的。现在子类覆盖父类的方法时,允许其返回类型定义为原始类型的子类型。
public Father getFather(){...} //父类中的方法
public Son getFather(){...} //子类覆盖父类中的getFather()方法
3. 如果是private、static、final 方法或者是构造器,则编译器明确地知道要调用哪儿个方法,这种调用方式成为“静态调用”。
4. 调用方法。
如果子类Son中定义了 method() 的方法,则直接调用子类中的相应方法;如果子类Son中没有定义相应的方法,则到其父类中寻找method()方法。
二、Demo
1. 子类重写父类中的方法,调用子类中的方法
public class Father{
public void method(){
System.out.println("父类方法:"+this.getClass());
}
}
public class Son extends Father{
public void method(){
System.out.println("子类方法"+this.getClass());
}
public static void main(String[] args){
Father instance = new Son();
instance.method();
}
}
//结果:子类方法:class Son
2. 子类没有重写父类中的方法,所以到父类中寻找相应的方法
public class Father{
public void method(){
System.out.println("父类方法:"+this.getClass());
}
}
public class Son extends Father{
public static void main(String[] args){
Father instance = new Son();
instance.method();
}
}
//结果:父类方法:class Father
三、动态绑定只是针对对象的方法,对于属性无效。因为属性不能被重写。
public class Father{
public String name = "父亲属性";
}
public class Son extends Father{
public String name = "孩子属性";
public static void main(String[] args){
Father instance = new Son();
System.out.println(instance.name);
}
}
//结果:父亲属性
Java的动态绑定机制的更多相关文章
- 关于 java 的动态绑定机制
关于 java 的动态绑定机制 聊一聊动态绑定机制, 相信看完这篇文章,你会对动态绑定机制有所了解. 网上大多一言概括: 当调用对象的时候,该方法会和该对象的内存地址/运行类型绑定. 当调用对象的属性 ...
- 【解惑】Java动态绑定机制的内幕
在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto ...
- JAVA 初识类加载机制 第13节
JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机 ...
- Java 的类加载机制
Java 的类加载机制 来源 https://www.cnblogs.com/xiaoxi/p/6959615.html 一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内 ...
- 我竟然不再抗拒 Java 的类加载机制了
很长一段时间里,我对 Java 的类加载机制都非常的抗拒,因为我觉得太难理解了.但为了成为一名优秀的 Java 工程师,我决定硬着头皮研究一下. 01.字节码 在聊 Java 类加载机制之前,需要先了 ...
- 面试官,不要再问我“Java虚拟机类加载机制”了
关于Java虚拟机类加载机制往往有两方面的面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断程 ...
- [转]Java虚拟机类加载机制
原文地址:http://blog.csdn.net/u013256816/article/details/50829596 看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎 ...
- 深入理解Java的反射机制
https://blog.csdn.net/u012585964/article/details/52011138 http://www.importnew.com/20339.html 一,java ...
- 面试官,不要再问我“Java虚拟机类加载机制”了(转载)
关于Java虚拟机类加载机制往往有两方面的 面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断 ...
随机推荐
- NOIP 考前 KMP练习
BZOJ 1461 && BZOJ 1729 KMP+BIT 一看就是字符串匹配但是不同的是要按照每个字符的排名情况. 首先对于数字x的排名,那么要判断x前小于x的数的个数,和x前小于 ...
- Java随笔三
1.接口: 1)接口不是类,不能使用new运算符实例化一个接口,而是对类的一组需求描述,这些类要遵循接口描述的统一格式进行定义.个人感觉像C语言中的函数在头文件中的预先声明,但是包含了一些类的特点,比 ...
- SqlServer性能优化 自定义动化性能收集(四)
配置数据收集器: 1.创建登录名并映射角色 2.配置管理数据仓库 3.创建收集组.收集项----MSDB数据存储 sp_syscollector_create... 4.自动配置相关job 具体步 ...
- ae学习
Ae 提供者CoSA 1993年1月 版本1.0 代号Egg 主要加入法人功能layered compositing with mask, effect, transforms, ...
- PS与TOP详解
一:ps ps -l 查看属于自己这次登录的PID与相关信息列出来(只与自己的bash有关) F:代表这个进程标志(process flags),说明这个进程的权限,常见号码有: 若为4表示此进程的 ...
- LESS用法·
CSS 彻底改变了 Web 页面的设计,但 CSS 仍然是静态的,而且在其句法发展方面受到限制.这些限制是有目的且合乎情理的,鼓励广泛加以实现.但开发人员和设计人员常常发现 CSS 使用起来很单调乏味 ...
- capwap协议重点分析
一. CAPWAP概述 CAPWAP由两个部分组成:CAPWAP协议和无线BINDING协议. (1)CAPWAP协议是一个通用的隧道协议,完成AP发现AC等基本协议功能,和具体的无线接入技术 ...
- MySQL数据库权限操作指南
-- 创建用户 CREATE USER 'dongrichtest' IDENTIFIED BY 'dongrichtest'; -- 新增后删除需要刷新权限 FLUSH PRIVILEGES; -- ...
- EMV文档:接收到的ATR不在EMV规定范围,终端需要的操作
Required terminal behaviour in the event that a terminal receives characters outside the range allow ...
- wordpress导入模板数据
主题安装完成以后,如果有主题的DEMO数据(xml格式的)的话可以导入,导入后该有的页面与分类文章等等都会有了,这样子会节省很多时间,导入后只需要更改对应的页面与分类就可以了. 导入方法: 1. 在后 ...