zoukankan      html  css  js  c++  java
  • 动态绑定

    方法可以沿着继承链的多个类中实现。JVM决定运行时调用哪个方法。

    方法可以在父类中定义而在子类中重写。例如:toString()方法是在Object类中定义的,而在GeometricObject类中重写。思考下面的代码

    Object o = new GeometricObject();
    System.out.println(o.toString());
    

    这里的o调用哪个toString()呢?为了回答这个问题,我们首先介绍两个术语:声明类型和实际类型。

    一个变量必须声明为某种类型。变量的这个类型称为它的声明类型(declared type)。这里o的声明类型是Object

    一个引用类型变量可以是一个null值或者是一个对声明类型实例的引用。实例可以使用声明类型或它的子类型的构造方法创建。

    变量的实际类型(actual type)是被变量引用的对象的实际类。这里,o的实际类型是GeometricObject,因为o指向使用new GeometricObject()创建的对象。o调用哪个toString()方法由o的实际类型决定。这称为动态绑定(dynamic binding)。

    动态绑定工作机制:

    假设对象o是类C1,C2,...,Cn-1,Cn的实例,其中C1是C2的子类,C2是C3的子类,...,Cn-1是Cn的子类。也就是说,Cn是最通用的类,C1是最特殊的类。在Java中,Cn是Object类、如果对象o调用一个方法foo,那么JVM会依次在类C1,C2,...,Cn-1,Cn中查找方法foo的实现,直到找到为止。一旦找到一个实现,就停止查找,然后调用这个首先找到的实现。

    image


    ┆ 凉 ┆ 暖 ┆ 降 ┆ 等 ┆ 幸 ┆ 我 ┆ 我 ┆ 里 ┆ 将 ┆   ┆ 可 ┆ 有 ┆ 谦 ┆ 戮 ┆ 那 ┆   ┆ 大 ┆   ┆ 始 ┆ 然 ┆
    ┆ 薄 ┆ 一 ┆ 临 ┆ 你 ┆ 的 ┆ 还 ┆ 没 ┆   ┆ 来 ┆   ┆ 是 ┆ 来 ┆ 逊 ┆ 没 ┆ 些 ┆   ┆ 雁 ┆   ┆ 终 ┆ 而 ┆
    ┆   ┆ 暖 ┆   ┆ 如 ┆ 地 ┆ 站 ┆ 有 ┆   ┆ 也 ┆   ┆ 我 ┆   ┆ 的 ┆ 有 ┆ 精 ┆   ┆ 也 ┆   ┆ 没 ┆ 你 ┆
    ┆   ┆ 这 ┆   ┆ 试 ┆ 方 ┆ 在 ┆ 逃 ┆   ┆ 会 ┆   ┆ 在 ┆   ┆ 清 ┆ 来 ┆ 准 ┆   ┆ 没 ┆   ┆ 有 ┆ 没 ┆
    ┆   ┆ 生 ┆   ┆ 探 ┆   ┆ 最 ┆ 避 ┆   ┆ 在 ┆   ┆ 这 ┆   ┆ 晨 ┆   ┆ 的 ┆   ┆ 有 ┆   ┆ 来 ┆ 有 ┆
    ┆   ┆ 之 ┆   ┆ 般 ┆   ┆ 不 ┆   ┆   ┆ 这 ┆   ┆ 里 ┆   ┆ 没 ┆   ┆ 杀 ┆   ┆ 来 ┆   ┆   ┆ 来 ┆
  • 相关阅读:
    ExtJS 4布局
    ExrJS4学习笔记1 类
    Jquery实现动态添加按钮
    ExtJs 4 MVC
    读取目录下所有目录和文件加载到TreeView
    利用List的Sort()、Find()、FindAll()、Exist()來解決一些問題
    html常用
    ExtJs3.3 TreePanel,checked节点和平常节点同时存在
    sql server 常用查询
    美女时钟网页代码
  • 原文地址:https://www.cnblogs.com/echoing/p/8474312.html
Copyright © 2011-2022 走看看