A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马李杰 中级黑马   /  2013-4-14 16:25  /  1301 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马李杰 于 2013-4-15 20:48 编辑

父类的引用指向子类的对象,那个变量名得到的字节码为什么是子类的字节码,而不是父类的子类码?如SupClass sup = new SubClass();Class clazz = suo.getClass();

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

正序浏览
我的理解:
多态的运用中有两个环境:编译时环境和运行时环境。
一个引用编译时检查的是父类,运行时运行的是子类。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
虽然变量名的引用是父类的,但是实例化的是子类的对象,也就是说,内存中保存的其实是子类的对象,父类的引用只起到一个引用这个内存地址的作用.
而当你真正要得到这个引用的字节码的时候,会从内存中去加载这个引用所真正对应的那个数据,所以,得到的是子类的字节码.

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
你好,
父类只是起到引用作用,并没有父类的实例对象,当然父的的字节码也加载到内存中了。
但是你是用子类的实例对象的方法方法获取字节码的,获得的字节码就是子类的字节码了、。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马