黑马程序员技术交流社区

标题: 当继承和多态一起存在的时候发生的一点有意思的现象 [打印本页]

作者: 陈兆辉    时间: 2014-9-22 21:28
标题: 当继承和多态一起存在的时候发生的一点有意思的现象
在百度知道里看到的提问,挺有意思的给大家分享一下,大家顺便帮我看看对不对。
他建立的是同一个子类对象,但是由于多态的原因,可以将类型转换成子类或父类。当引用不同的时候,会发现打印的结果完全不同。
我是这样理解的,也是这么给他的回答的,大家帮我看看对不对:
在堆内存中,你建立的Test2对象被new出来以后,实际上里面有两个var_final变量,一个是this.var_final,一个是super.var_final,也有两个方法,一个是this.myFunction(),一个是super.myFunction()。
所以,当你在使用"对象.成员变量"的方法调用的时候,如果你没有在那个变量前面加this或super进行指定,那么虚拟机就会按照对象的类型来决定是调用哪一个。所以在修改以前,你的test的类型是父类,
自然就是调用的的super.var_final和super.myFunction()。修改以后,这个对象被强制转变成了子类,所以就调用了this.var_final和this.myFunction()。
而你的那个doit()方法里面输出的一直是200,是因为你不是用的对象的引用test或testd,而是直接写的var_final,所以JVM直接调用的是this.var_final。

1.jpg (10.9 KB, 下载次数: 23)

1.jpg

3.jpg (68.97 KB, 下载次数: 9)

3.jpg

4.jpg (1.35 KB, 下载次数: 20)

4.jpg

5.jpg (70.53 KB, 下载次数: 14)

5.jpg

6.jpg (1.33 KB, 下载次数: 16)

6.jpg

作者: 陈兆辉    时间: 2014-9-22 21:29
他提问的时候就是截的图,我也懒得再在eclipse里面写一遍了。就直接也也截图下来了。有兴趣的兄弟凑合着看一下吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2