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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁健 黑马帝   /  2011-11-17 21:10  /  1679 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天把多态视频看玩了。去网上找了些面试题目巩固了下,有道题目还不是很清楚
  关于父类和子类,下列说法不正确的是:
1.变量可以调用的方法必须是该变量类型的成员
2.包含子类对象的引用的父类类型变量会调用父类方法
3.将父类对象的引用赋值给子类类型的变量会产生编译错误
我认为是1是错的,怎么答案是3错误啊?????求解!!!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

2 个回复

倒序浏览
杨杰 黑马帝 2011-11-17 21:23:45
沙发
变量 这个词有歧义。如果把变量理解为4个字节(32位机)的引用,那么1就显然错了。2呢,包含子类对象的引用的超类类型变量,如果子类重写了父类方法,默认是调子类对象的方法的。这个呢从内存模型上可以解释,因为它访问的这个东西在堆内存中是存在的。所以2不怎么对。我呢一般把对象叫做类的实例,所谓这个实例就是分配了空间并且进行了实例化(初始化)。把指这个类的实例的那个东东叫作引用。也就是这里的变量。有点类似到C++中的指针和指针所指向的空间。所谓对象就是指这个空间,指针呢就是存储指向这个空间的一个内存起始地址。因为在Java中  Object obj =  new Object();  真正的对象实例是new Object();而obj仅仅是存储指向这个new Object()空间的-引用(说明下:在JVM中可能是一个指向这个空间的索引)不等同于决对地址。JVM会根据内存实时信息根据一定算法回收内存,调整堆大小。所以这个引用存的就是一个偏址。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
我也来分析一下,呵呵,不知道正确不:

1、变量可以调用的方法必须是该变量类型的成员 (也可以是父类保护或者公有的成员方法)
2、包含子类对象的引用的父类类型变量会调用父类方法(这个显而易见是错误的,这个明显就是多态会调用子类的方法)
3、将父类对象的引用赋值给子类类型的变量会产生编译错误 (这个我觉得是正确的,如果要赋值的话,应该强转)

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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