动态绑定

article/2025/9/22 17:29:10

文章目录

    • 动态绑定
    • 发生的条件
    • 在构造方法中调用重写的方法(一个坑)

动态绑定

动态绑定也叫运行时绑定,通俗的讲, 在Java中, 调用某
个类的方法,究竟执行了哪段代码(是父类方法的代码还
是子类方法的代码) , 要看究竟这个引用指向的是父类对
象还是子类对象. 这个过程是程序运行时决定的(而不是
编译期), 因此称为 动态绑定.

发生的条件

1、父类引用引用子类对象2、通过父类引用调用父类和子类的同名覆盖方法

例如

class X{public void eat(){System.out.print("父类吃");}
}
class Y extends X {public void eat(){System.out.print("子类吃");}
}
public class dd {public static void main(String[] args) {X x=new Y();x.eat();}
}

在这里插入图片描述
发生动态绑定时,父类引用调用父类和子类的同名覆盖方法,执行的是子类里的方法,如上例中子类Y里的eat方法。

在构造方法中调用重写的方法(一个坑)

一段有坑的代码. 我们创建两个类, B 是父类, D 是子类. D 中重写 func 方法. 并且在 B 的构造方法中调用 func

class B { public B() { func(); } public void func() { System.out.println("B.func()"); } 
} 
class D extends B { private int num = 1; @Override public void func() { System.out.println("D.func() " + num); } 
} 
public class Test { public static void main(String[] args) { D d = new D();} 
} 
// 执行结果
D.func() 0

分析

1、构造 D 对象的同时, 会调用 B 的构造方法.
2、B 的构造方法中调用了 func 方法, 此时会触发动态绑定, 
会调用到 D 中的 func方法。
3、此时 D 对象自身还没有构造, 此时 num 处在未初始化
的状态, 值为 0.为什么说这是一个坑?
因为在一般情况下,我们其实想调用的是类B里的func方法,
但发生了动态绑定,调用了子类D中的func方法。结论: "用尽量简单的方式使对象进入可工作状态", 尽量不要
在构造器中调用方法(如果这个方法被子类重写, 就会触发动
态绑定, 但是此时子类对象还没构造完成), 可能会出现一些
隐藏的但是又极难发现的问题.

http://chatgpt.dhexx.cn/article/mEPBLvgn.shtml

相关文章

动态绑定,多态(带你从本质了解多态)

在上一章节中,我们讲述了虚函数和虚函数表,我们知道了不管在类中有多少个虚函数,都不会使类的大小扩大,在this指针中,只会多出一个虚函数表的地址,是this指针的第一个内容,在虚函数表中&#xf…

数据结构——哈希表(Hash表)、哈希碰撞

1.概述 哈希表(也叫散列表),是根据键(Key)直接访问在内存存储位置的数据结构。就是一种以 键-值(key-value) 存储数据的结构,我们只要输入key,就可查找到其对应的值。 hash函数就是根据key计算…

24-哈希碰撞攻击是什么?

24-哈希碰撞攻击是什么? 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招。本文结合PHP内核源码,聊一聊这种攻击的原理及实现。 哈希表碰撞攻击的基本原理 哈希表是一种…

hashcode及哈希碰撞

数据结构中: 用来映射元素关键字(能唯一标识该元素,类似数据库中的主键可以唯一标识一条记录)和元素的内存地址的关系(解决树,线程表等结构中元素和位置无确定关系,查找时需要进行不断比较的问题。顺序查找的比较结果是和不等。树…

hash和hash碰撞以及解决方案

hash: Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是…

哈希碰撞攻击与防范机制

1.引子 哈希表的原理是用数组来保存键值对,键值对存放的位置(下标)由键的哈希值决定,键的哈希值可以在参数时间内计算出来,这样哈希表插入、查找和删除的时间复杂度为O(1),但是这是理想的情况下&#xff0…

HashMap的实现原理及hash冲突(碰撞)解决方法

HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时,系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这…

解决Hash碰撞冲突方法总结

Hash碰撞冲突 我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。如下将介绍如何处理冲突,当然其前提是一…

哈希表碰撞攻击的基本原理

原文地址:http://blog.jobbole.com/11516/ 来源:张洋 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招。本文结合PHP内核源码,聊一聊这种攻击的原理及实现。 …

hash碰撞处理方法

目录 哈希表 哈希冲突 解决碰撞方法 1、开放定址法 a)、线性探测法 a)、二次探测法 c)伪随机探测 2、再哈希法 3、拉链法 4、建立公共溢出区 哈希表 是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。 简单来说…

通俗讲解哈希表,哈希碰撞问题!

哈希表是个啥? 小白: 庆哥,什么是哈希表?这个哈希好熟悉,记得好像有HashMap和HashTable之类的吧,这是一样的嘛?😊 庆哥: 这个哈希确实经常见😂,足…

哈希碰撞是个什么鬼?

什么是哈希算法? 哈希算法,也叫哈希函数,散列函数,是将任意长度的二进制值映射为较短的固定长度的二进制值,即哈希值。哈希算法是一种只能加密,不能解密的特殊算法。 什么是哈希碰撞? 如果不…

哈希值与哈希碰撞

哈希碰撞 一、什么是哈希? 哈希(hash)就是讲不同的输入,映射成独一无二、固定长度的值,既哈希值。 我们可以理解为商品的条形码。任何商品都会有一个固定长度而又固定的条码。它的作用就类似于哈希。 哈希值长度可…

【Java】哈希冲突(哈希碰撞)

文章目录 为什么发生哈希冲突(哈希碰撞)能否完全避免哈希冲突常用处理哈希冲突的方法1.开放地址法1.1线性探测再散列缺点:二次聚集 1.2二次探测再散列1.3伪随机探测再散列 2.再哈希地址法3.链地址法4.建立公共溢出区 为什么发生哈希冲突&…

什么是哈希,哈希表,哈希函数,哈希碰撞?

什么是哈希? 比方我有个原始值,S[“老铁双击666”,‘感谢老铁送的飞机’], 通过某种算法(比如java的hasecode(获得变量的物理地址))得到的666这个就是“哈希码“(将字符串转换成尽可能不重复的int类型数字…

解决哈希碰撞的方法

什么是hash表 根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为哈希表,这一映像过程称为哈希造表或…

公网IP/内网IP:

转自:http://hi.baidu.com/qkjzsjqsehailte/item/1042151cc0959f426926bbb4 IP地址分配 IP地址标识着网络中一个系统的位置。我们知道每个IP地址都是由两部分组成的:网络号和主机号。其中网络号标识一个物理的网络,同一个网络上所有主机需要同…

公网ip、内网ip

首先解释一下“内网”与“外网”的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的。但两个局域网内的内网IP可以有相同的。 外网:即互联网&a…

什么是公网IP和内网IP?

1、引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢?另外,内行都知道&#xff0c…

内网地址与公网地址及作用

下个礼拜就要过年喽 每天离假期更近了一步,就充满了动力 大家回家路上也要注意防护安全哦 ———————————————————— 一般内网指的就是我们园区内网,用的地址一般都是私有地址 私有地址在RFC1918草案中被提到,指的就是10…