免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1619 | 回复: 2
打印 上一主题 下一主题

多态 小问题,请大虾门帮帮我。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-13 02:39 |只看该作者 |倒序浏览
25. What is displayed when the following is executed?
class Parent
{
private void method1()
{
System.out.println("arent's method1()";
}
public void method2()
{
System.out.println("arent's method2()";
method1();
}
}
class Child extends Parent
{
public void method1()
{
System.out.println("Child's method1()";
}
public static void main(String args[])
{
Parent p = new Child();
p.method2();
}
}
Choices:
a. Compile time error
b. Run time error
c. prints : Parent's method2()
          Parent's method1()
d. prints : Parent's method2()
          Child's method1()


父类中 private  method1()  对子类应该是隐藏的吧?执行method2()时先从子类查找,无再从父类,找到并执行,执行method2()的时候又调用       method1() ,通常情况下应该是先从子类中查找此方法,但 父类的method1()前面加了private为什么就要调用父类的方法啊??真想不通

论坛徽章:
0
2 [报告]
发表于 2005-08-13 19:29 |只看该作者

多态 小问题,请大虾门帮帮我。

没人帮我啊  。。。。

论坛徽章:
0
3 [报告]
发表于 2005-08-14 09:11 |只看该作者

多态 小问题,请大虾门帮帮我。

这个是因为编译Parent类的时候编译器发现methond1是private,在编译

  1. public void method2()
  2. {
  3. System.out.println("Parent's method2()");
  4. method1();
  5. }
复制代码

就做了特殊处理,使得这个method1的调用绑定到了Parent.method1()上,你可以试试用javap看看字节码,就会发现Parent.method1()分别声明成private和public的时候,Parent.method2()中的method1()调用分别被编译成了invokespecial和invodevirtual两种不同的bytecode
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP