`
lihengzkj
  • 浏览: 44231 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于动态绑定的深入

JVM 
阅读更多
还是先看看示例代码:
public class Child extends Parent{
	private int i =3;
	public Child() {
		// TODO Auto-generated constructor stub
	}
	public final void test1(){
		System.out.println("-----");
	}
	public static void main(String [] args){
		Child child = new Child();
		child.test();
	}
	public void test(){
		System.out.println("^^^^^^^^^^^^"+i);
	}
}
class Parent {
	public Parent(){
		System.out.println("--------befor---------");
		test();
		System.out.println("---------after--------");
	}
	
	public void test(){
		System.out.println("*******");
	}
	
}

运行的结果是:

--------befor---------
^^^^^^^^^^^^0
---------after--------
^^^^^^^^^^^^3

解释:从运行的结果可以大致看出对象产生的过程:在创建对象的时候发现该类有父类,那么先调用父类的构造方法,产生父类对象后才来调用子类的构造方法。大致产生对象的过程是这样的。但是我们看到父类构造方法里面有些不同,它在构造方法里面调用了自己的一个方法,而这个方法同时被子类重写了。从结果来看,在调用父类的构造方法的时候是实现了动态绑定的。父类构造方法调用的test方法是子类重写的方法,而不是父类的。这说明动态帮定深入到了继承的每个层次。但是我们看父类构造方法中调用test后i的值是0。为什么呢?那是因为在创建子类对象的时候,要给子类分配内存空间,分配给子类对象的空间在这个时候初始化为二进制的0,这个时候还没有调用父类的构造方法。接下来才调用父类的构造方法,然后接着调用子类的构造方法。所以我们看到的结果是:父类构造方法调用的时候i值是0,而这个0是二进制的0,而不是我们通常说的没有赋初值时候JVM赋的十进制的0。
分享到:
评论

相关推荐

    深入理解C++的动态绑定和静态绑定

    深入理解C++的动态绑定和静态绑定 静态绑定:绑定的对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。 动态绑定:绑定的对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在...

    Java 静态绑定与动态绑定深入分析

    主要介绍了Java 静态绑定与动态绑定深入分析的相关资料,这里对java 的动态绑定和静态绑定做了详细的介绍,对其进行总结整理,需要的朋友可以参考下

    深入理解C++的动态绑定与静态绑定的应用详解

    为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、...

    一文读懂vue动态属性数据绑定(v-bind指令)

    四、 深入 在上图中将a标签的href属性值设置为toutiao,VUE实例将自动去data里面寻找toutiao属性进行值绑定。 不只是a标签,所有的html标签属性都可以通过v-bind进行值绑定,然后通过改变数据动态改变它的属性值...

    深入.NET平台和C#编程内部测试-机试试卷

    其中第一个节点是固定的,不需要从XML文件动态读取并绑定,其它子节点需要动态绑定。 2. 人员使用DataGridView 控件进行展示,如图-1所示,人员数据来源于SQL Server 数据库,表结构如表-1 所示。

    js this 绑定机制深入详解

    本文实例讲述了js this 绑定机制。分享给大家供大家参考,具体如下: 函数调用位置 与词法作用域相反的是,this的指向由函数运行时决定,它是动态的,随着函数调用位置变化而变化。 要理解 this,首先要理解调用位置...

    深入理解C# 中文第三版

    深入理解C#(第3版)是C#领域不可多得的经典著作。本书是世界顶级技术专家“十年磨一剑”...第14章静态语言中的动态绑定 第五部分C# 5:简化的异步编程 第15章使用async/await进行异步编程 第16章C# 5附加特性和结束语

    asp.net数据绑定时动态改变值的代码

    ——–后台——————– 代码如下: protected string GetStr(string boo) { if (“False”.... 您可能感兴趣的文章:ASP.NET数据绑定的记忆碎片实现代码浅析DataBinder.Eval和Eval的区别深入理解Asp.net中DataBinder.E

    frida面向开发人员逆向工程师和安全研究人员的动态检测工具包.zip

    面向开发人员、逆向工程师和安全研究人员的动态检测工具包。将您自己的脚本注入黑盒进程。挂接任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击保存,并立即看到结果。所有这些都无需编译步骤...

    深入浅析c#静态多态性与动态多态性

    在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为: •函数重载 •运算符重载 运算符重载将在下一章节讨论,接下来我们将讨论函数重载。 函数重载 您...

    论文研究-从内存布局深入剖析继承与多态 .pdf

    从内存布局深入剖析继承与多态,匡翠芸,,在面向对象程序设计中,使派生类继承基类的虚函数,再定义一个指向派生类对象的基类指针可以轻松实现动态绑定程,那么编译器是如何做

    深入理解c++中virtual关键字

    c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要主要是实现动态绑定。 2.那些情况下可以使用virtual关键字...

    论文研究-协议脆弱性分析及其测试研究.pdf

    随着网格商业化的不断深入,网格计算...在服务合同中导入了软服务合同SSC和硬服务合同HSC概念,并指出动态绑定服务之前所生成的软服务合同SSC仅仅起到占位符的作用,只有在绑定时通过“硬化”才获得真实的服务承诺。

    Delphi面向对象编程思想

     建立在动态绑定机制上和类型转换机制上的面向对象高级编程技巧。  为了实现程序的可维护性、可扩展性和可重用性,而对封装、界面和业务对象的分离、分布式多层体系结构以及实现界面和业务应用跨平台的深入讨论。

    frida:面向开发人员的动态检测工具包-开源

    面向开发人员、逆向工程师和安全研究人员的动态检测工具包。 将您自己的脚本注入黑盒进程。 挂钩任何函数,监视加密 API 或跟踪私有应用程序代码,无需源代码。 编辑,点击保存,并立即查看结果。 无需编译步骤或...

    对Java的思考(Thinking in Java) Java入门 java与C++对比 深入浅出

    1.6.1 动态绑定 1.6.2 抽象的基础类和接口 1.7 对象的创建和存在时间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 ...

Global site tag (gtag.js) - Google Analytics