【Java笔记】动态绑定
来源:互联网 发布:淘宝返利哪个 编辑:程序博客网 时间:2024/06/10 18:51
假如有两个类,如下:
class Life { @Override public String toString() { return "life"; }}class Animal extends Life { @Override public String toString() { return "animal"; }}
Life 类和 Animal 类中都有 toString() 方法,如果发生下面的情况,会调用哪个 toString() 方法呢:
Life a = new Animal();System.out.println(a.toString());
输出结果为:
animal
从结果看出,a 调用了 Animal 类中的 toString() 方法。
a 的声明类型是 Life ,a 被指向使用 new Animal() 创建的对象,所以 a 的实际类型应该为 Animal 。a 调用哪个 toString() 方法是由它的实际类型决定的。这就是动态绑定。
假设 Piggy 是 Pig 的子类,Pig 是 Animal 的子类,Animal 是 Life 的子类,而 Life 是 Object 的子类。如果对象 g 是类 Piggy 的实例,那么当你调用一个方法 m 时,JVM 会依次在类 Piggy 、Pig 、Animal 、Life 、Object 中寻找方法 m,直到找到一个方法 m 便会停止寻找,然后调用这个最先找到的方法。这就是动态绑定的工作机制。
下面是关于动态绑定机制的一个例子:
public class Test { public static void main(String[] args) { printString(new Piggy()); printString(new Pig()); printString(new Animal()); printString(new Life()); } public static void printString(Life life) { System.out.println(life.toString()); }}class Life {}class Animal extends Life { @Override public String toString() { return "animal"; }}class Pig extends Animal { @Override public String toString() { return "pig"; }}class Piggy extends Pig {}
输出结果为:
pig
pig
animal
Life@15db9742
最后输出的 Life@15db9742 是 Object 类中 toString() 的返回结果。
0 0
- 【Java笔记】动态绑定
- Java动态绑定机制--笔记
- Java 学习笔记 (12) - 动态绑定
- 学习笔记之 java的动态绑定与静态绑定
- 【Java学习笔记】继承,动态绑定与静态绑定
- Java【动态绑定、静态绑定】-动态绑定
- java动态绑定静态绑定
- Java动态绑定 静态绑定
- java 静态绑定 动态绑定
- Java 动态绑定,静态绑定
- Java学习笔记——继承、动态绑定技术
- think in java笔记1-上溯造型,动态绑定
- Java 学习笔记(0x0B) 动态绑定与多态性
- 面相对象-学习笔记-java中的多态/动态绑定
- 【Java笔记】在强制转换中理解动态绑定
- java&cpp 动态绑定
- Java 动态绑定详解
- Java的动态绑定
- 最短路径算法
- MATLAB”奇淫技巧“(Updating。。)
- CodeForces 761F. Dasha and Photos
- centos7下使用yum安装mysql
- 如何用一根网线实现在两台电脑之间传输数据
- 【Java笔记】动态绑定
- Oracle 数据库的数据泵和流池(streams pool)的文章
- 安装RPM包或者安装源码包
- session入库
- 面向(基于)对象编程(1st)什么是对象?什么是面向对象?
- 小记
- 交换与路由练习(十三、BGP)
- ssh: connect to host localhost port 22: Connection refused
- 记一个质量极差的测试工具——请重视手工测试,自动化测试不是银弹