黑马程序员技术交流社区
标题:
一个关于多态的面试题目,求解!
[打印本页]
作者:
梁健
时间:
2011-11-17 21:10
标题:
一个关于多态的面试题目,求解!
今天把多态视频看玩了。去网上找了些面试题目巩固了下,有道题目还不是很清楚
关于父类和子类,下列说法不正确的是:
1.变量可以调用的方法必须是该变量类型的成员
2.包含子类对象的引用的父类类型变量会调用父类方法
3.将父类对象的引用赋值给子类类型的变量会产生编译错误
我认为是1是错的,怎么答案是3错误啊?????求解!!!
作者:
杨杰
时间:
2011-11-17 21:23
变量 这个词有歧义。如果把变量理解为4个字节(32位机)的引用,那么1就显然错了。2呢,包含子类对象的引用的超类类型变量,如果子类重写了父类方法,默认是调子类对象的方法的。这个呢从内存模型上可以解释,因为它访问的这个东西在堆内存中是存在的。所以2不怎么对。我呢一般把对象叫做类的实例,所谓这个实例就是分配了空间并且进行了实例化(初始化)。把指这个类的实例的那个东东叫作引用。也就是这里的变量。有点类似到C++中的指针和指针所指向的空间。所谓对象就是指这个空间,指针呢就是存储指向这个空间的一个内存起始地址。因为在Java中 Object obj = new Object(); 真正的对象实例是new Object();而obj仅仅是存储指向这个new Object()空间的-引用(说明下:在JVM中可能是一个指向这个空间的索引)不等同于决对地址。JVM会根据内存实时信息根据一定算法回收内存,调整堆大小。所以这个引用存的就是一个偏址。
作者:
任俊杰
时间:
2011-11-18 08:37
我也来分析一下,呵呵,不知道正确不:
1、变量可以调用的方法必须是该变量类型的成员 (也可以是父类保护或者公有的成员方法)
2、包含子类对象的引用的父类类型变量会调用父类方法(这个显而易见是错误的,这个明显就是多态会调用子类的方法)
3、将父类对象的引用赋值给子类类型的变量会产生编译错误 (这个我觉得是正确的,如果要赋值的话,应该强转)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2