锁定老帖子 主题:围观某公司的Java面试题,多态方法调用
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-01-01
<pre name="code" class="java"> public class Super { private int i=10; public void execute(){ System.out.println(i); } public static void main(String[] args) { Derived derived = new Derived(); Super superr = derived; System.out.println("derived value:"); derived.execute(); System.out.println("super value:"); superr.execute(); } } public class Derived extends Super { private int i=20; } </pre> 要求写出程序执行结果。 正确答案是 derived value: 10 super value: 10 但我当时写的答案是20, 20。 题目是典型的钻牛角尖。 我干嘛要声明一个子类的变量,然后又把它变成父类,又要调用父类的方法? 从来没见过这么搞的,就算实际中有,也是可读性差、可维护性差的写法,能做出这种题,只能说明是个应试型人才罢了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-01-01
楼上没有考过SCJP,或者是OCJP。
|
|
返回顶楼 | |
发表时间:2014-01-03
好好看看基础
|
|
返回顶楼 | |
发表时间:2014-01-03
唉。。。。 基础啊。。。基础 private。。。。。
|
|
返回顶楼 | |
发表时间:2014-01-03
这样的题目,如果平时有注意的话,应该不会有这种情况。另外,如果你看过SCJP的话,那就更清晰了
|
|
返回顶楼 | |
发表时间:2014-01-03
有点类似模板设计模式
|
|
返回顶楼 | |
发表时间:2014-01-03
Vity 写道 唉。。。。 基础啊。。。基础 private。。。。。
貌似和private没有关系. |
|
返回顶楼 | |
发表时间:2014-01-03
跟private 一毛钱关系都木有,亲
|
|
返回顶楼 | |
发表时间:2014-01-03
不费解吧,这不是继承么,两个引用都指向同一个子类的实体
|
|
返回顶楼 | |
发表时间:2014-01-04
最后修改:2014-01-04
System.out.println(ToStringBuilder.reflectionToString(derived, ToStringStyle.DEFAULT_STYLE));
System.out.println(ToStringBuilder.reflectionToString(superr, ToStringStyle.DEFAULT_STYLE)); 输出的两个对象都是:Derived@530daa[i=20,i=10] 而且两个对象的的内存地址是一样的,说明两个变量指向的都是同一个对象。 之所以会输出10,是因为调用的都是父类中的方法,所以输出的是父类中的属性 个人愚见,希望大家讨论。 |
|
返回顶楼 | |