关于 java 的动态绑定机制

聊一聊动态绑定机制, 相信看完这篇文章,你会对动态绑定机制有所了解。

网上大多一言概括:

当调用对象的时候,该方法会和该对象的内存地址/运行类型绑定。

当调用对象的属性时,没有动态绑定机制,哪里声明就使用哪里。

这里我们展开来说一说。

动态绑定机制,简单来说,就是在以父类为编译类型,创建子类对象的时候,绑定子类运行类型,当我们再调用方法的时候,能够有序的寻找方法,实现方法的有序调用。

动态绑定机制会出现在多态中,多态是 Java 的重要的三个属性之一,动态绑定机制就是建立在,封装,多态,继承的基础上延伸出的。

要了解动态绑定机制,首相要把对象的多态与继承搞明白,还有编译类型,运行类型,这是前提。网上都有详细的讲解,这里不做延伸。

废话不多书,直接上代码演示讲解,详细的讲解会在代码的注释当中。

首先我们要创建父类 Person 类

//创建父类
public class Person {
//简单的创建两个属性
private String name;
private int age; //创建行为方法,方法中调用创建的say方法
public void haviours(){
say();
}
//创建方法
public void say(){
System.out.println("我是人类!!!");
} }

创建子类 Student

//创建子类
public class Student extends Person {
//创建学生的属性
private int score;
//重写行为
public void haviours(){
say();
}
//重写say方法
public void say(){
System.out.println("我是学生!!!");
}
}

首先我们对 say 方法进行调用。

public class Demo01 {
public static void main(String[] args) {
//创建学生
Person student = new Student();
//调用学生的say()方法,由于我们的编译类型是Person类,而运行类型是Student类,而动态绑定机制是绑定运行类型。
//所以,当我们调用say()方法时,是调用Student类的say()方法
student.say();//返回“我是学生”
//、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
//如果我们将student类的say()方法注销,他寻找student类的say方法无果后,会再向它的父类调用say方法。返回我是人类,效果等同于 }
}

但是,重点来了。。。。。。。。。。。。

如果我们调用的是 haviours 方法,那么他的方法是调用什么呢

public class Demo02 {
public static void main(String[] args) {
//创建学生
Person student = new Student();
//调用学生的haviours方法,由于我们的编译类型是Person类,而运行类型是Student类,而动态绑定机制是绑定运行类型。
//所以,当我们调用haviours()方法时,该对象绑定的是Student类,所以是调用Student类的say()方法
student.haviours();//返回我是学生!!!
}
}

但是,还有人可能会有疑问,如果 Student 类中的 havious 方法被注释掉呢,你是不是会想。子类 Student 中没有 havious 方法,调用父类的 havious 方法,然后 havious 调用父类的 say 方法???

抱歉了,他调用的是子类 Student 的 Say 方法

public class Demo03 {
public static void main(String[] args) {
//创建学生
Person student = new Student();
//调用学生的haviours方法,由于我们的编译类型是Person类,而运行类型是Student类,而动态绑定机制是绑定运行类型。
//所以,当我们调用haviours()方法时,由于子类没有havious方法,调用父类的havious方法,在父类的havious中,调用say方法,这时,动态绑定机制是绑定运行类型。该对象绑定的是Student类,所以是调用Student类的say()方法
student.haviours();//返回我是学生!!!
}
}

介绍完动态邦迪机制对方法的绑定,接下来说一说对属性的影响。

当调用对象的属性时,没有动态绑定机制,哪里声明就使用哪里。这句话十分容易理解。

也就是动态绑定机制对属性没有影响,放心调用。

动态绑定机制(完)。

结语:由于在网上查找相关的动态绑定机制时,看到没有动态绑定的详细讲解,而这也是一个小难点,所以翻阅书籍,进行了学习,并进行总结,世界上本没有路,走的人多了,也便有了路。

有兴趣可以加QQ一起讨论:3282300758

关于 java 的动态绑定机制的更多相关文章

  1. Java的动态绑定机制

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

  2. 【解惑】Java动态绑定机制的内幕

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

  3. JAVA 初识类加载机制 第13节

    JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机 ...

  4. Java 的类加载机制

    Java 的类加载机制 来源 https://www.cnblogs.com/xiaoxi/p/6959615.html 一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内 ...

  5. 我竟然不再抗拒 Java 的类加载机制了

    很长一段时间里,我对 Java 的类加载机制都非常的抗拒,因为我觉得太难理解了.但为了成为一名优秀的 Java 工程师,我决定硬着头皮研究一下. 01.字节码 在聊 Java 类加载机制之前,需要先了 ...

  6. 面试官,不要再问我“Java虚拟机类加载机制”了

    关于Java虚拟机类加载机制往往有两方面的面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断程 ...

  7. [转]Java虚拟机类加载机制

    原文地址:http://blog.csdn.net/u013256816/article/details/50829596 看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎 ...

  8. 深入理解Java的反射机制

    https://blog.csdn.net/u012585964/article/details/52011138 http://www.importnew.com/20339.html 一,java ...

  9. 面试官,不要再问我“Java虚拟机类加载机制”了(转载)

    关于Java虚拟机类加载机制往往有两方面的 面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断 ...

随机推荐

  1. 【原创】快速理解Unicode和utf-8的本质

    字符串编码 基本概念 在代码中处理,为了字节统一,都统一使用Unicode 核心:在pyhton中s.encode("utf-8")中的变量实例s必须是已经是Unicode格式,否 ...

  2. MySQL - 分页问题

    MySQL中的分页 MySQL中通过LIMIT关键字可以实现分页,如:(其中0表示开始记录数,10表示返回数据的数量) SELETE * FROM table_name LIMIT 0, 10 MyB ...

  3. 【二分图】匈牙利 & KM

    [二分图]匈牙利 & KM 二分图 概念: 一个图 \(G=(V,E)\) 是无向图,如果顶点 \(V\) 可以分成两个互不相交地子集 \(X,Y\) 且任意一条边的两个顶点一个在 \(X\) ...

  4. Gitee整改之思考

    本文主要内容如下: 1.Gitee是什么? 2.Gitee与Github的区别有哪些? 3.为什么要使用Gitee? 4.Gitee的商业模式是怎样的? 5.Gitee为何会被整改? 6.Gitee这 ...

  5. 封装环形加载进度条(Vue插件版和原生js版)

    1.效果预览 2.用到的知识 主要利用SVG的stroke-dasharray和stroke-dashoffset这两个属性. 在看下面文章之前,你需要了解 <!DOCTYPE html> ...

  6. AspNetCore&云效Flow持续集成

    如今有了越来越多的持续集成工具,给的个人开发者的福利也是很足了,如无必要,自建工具有时只是作为练手了. 众多持续集成工具 现在可用的持续集成工具繁多,各大云服务商都推出了持续集成,甚至是一定条件内都是 ...

  7. RPA 抖音机器人汇总

    一.RPA 抖音小店催好评机器人 RPA机器人详情: 1.配置好抖音小店订单号与催好评话术 2.启动抖音小店催好评机器人 3.机器人打开飞鸽客服软件 4.自动搜索订单号,自动发送催好评内容 5.机器人 ...

  8. 【python基础】第08回 流程控制 for循环

    本章内容概要 1.循环结构之 for 循环 本章内容详解 1.循环结构之for循环 1.1 语法结构 for 变量名 in 可迭代对象: #字符串 列表 字典 元组 for 循环的循环体代码 针对变量 ...

  9. 最优化:凸集、凸函数、KKT条件极其解释

    1.凸集(大概定义) 2.凸函数  3.KK条件      

  10. 常用类-Instant、DateTimeFormatter类的使用

    一.Instant 我们所处的时间点是在东八区,Java中Instant所计算出来的时间是按本初子午线的时间来算的,与我们的时间相差8个小时,也就是说当我的北京时间是上午九点时,本初子午线的时间是凌晨 ...