首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

您真的理解Java的this和super吗

2013-10-10 
你真的理解Java的this和super吗?你不知道的this很多介绍java的书籍都说this指该对象本身。我们来看下面代码

你真的理解Java的this和super吗?

你不知道的this

很多介绍java的书籍都说this指该对象本身。我们来看下面代码:



有汇编基础的朋友可以看出i=3会在构造函数里执行。现在的问题是父类构造函数的this是什么的?实际上,这个this的真正解释是:this在构造器里时,this代表正在初始化的对象。所以这个this指的就是Sub!可能有些朋友会想,不是有super这个隐含对象吗?等会在介绍super时告诉你,根本就没有隐含对象这回事。这样,执行的Sub的display,而此时Sub的i还没有初始化,还是为默认值0。但是,如果在Base的构造器里添加 System.out.println(this.i); 那么这句话会打印出 3。这是因为这个this在编译时是Base。或者说,对于实例变量,它的执行和声明的类型有关;而对于方法,它的执行和其引用对象类型有关。这就是编译时类型和运行时类型的秘密。这里更深层的原因,笔者将在以后的文章里详细介绍。
你不知道的super有一点要明确,像类型上面代码的结构里,系统只有一个Sub对象,不存在父类。但是这个Sub对象持有了两个i的实例变量。如果我们在父类有方法:
Sub s = new Sub();Base b = s.getSuper();

执行 a==b,结果是true。这表明super根本就不是默认的父类对象。有很多其他语法可以证明这点,比如 不能return super,super不能单独使用。

1楼yang1986com昨天 14:40
有帮助!

热点排行