论坛首页 编程语言技术论坛

围观某公司的Java面试题,多态方法调用

浏览 15987 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-01-01  
违反人类直觉,违反软件开发初衷的Java面试题。


<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。

题目是典型的钻牛角尖。 我干嘛要声明一个子类的变量,然后又把它变成父类,又要调用父类的方法? 从来没见过这么搞的,就算实际中有,也是可读性差、可维护性差的写法,能做出这种题,只能说明是个应试型人才罢了。
   发表时间:2014-01-01  
楼上没有考过SCJP,或者是OCJP。
0 请登录后投票
   发表时间:2014-01-03  
好好看看基础
0 请登录后投票
   发表时间:2014-01-03  
唉。。。。 基础啊。。。基础  private。。。。。
0 请登录后投票
   发表时间:2014-01-03  
这样的题目,如果平时有注意的话,应该不会有这种情况。另外,如果你看过SCJP的话,那就更清晰了
0 请登录后投票
   发表时间:2014-01-03  
有点类似模板设计模式
0 请登录后投票
   发表时间:2014-01-03  
Vity 写道
唉。。。。 基础啊。。。基础  private。。。。。

貌似和private没有关系.
0 请登录后投票
   发表时间:2014-01-03  
跟private 一毛钱关系都木有,亲
0 请登录后投票
   发表时间:2014-01-03  
不费解吧,这不是继承么,两个引用都指向同一个子类的实体
0 请登录后投票
   发表时间: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,是因为调用的都是父类中的方法,所以输出的是父类中的属性
个人愚见,希望大家讨论。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics