免费注册 查看新帖 |

Chinaunix

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

scjp试题解析三十四 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-11 12:22 |只看该作者 |倒序浏览
qq:2535279

 1) class Person {
  2) public void printValue(int i, int j) {/*…*/ }
  3) public void printValue(int i){/*...*/ }
  4) }
  5) public class Teacher extends Person {
  6) public void printValue() {/*...*/ }
  7) public void printValue(int i) {/*...*/}
   public static void main(String args[]){
  9) Person t = new Teacher();
  10) t.printValue(10);
  11) }
  12) }
  Which method will the statement on line 10 call?
  A. on line 2
  B. on line 3
  C. on line 6
  D. on line 7
  翻译
  第十行的声明将调用哪些方法。
  答案 D        www.javaedu.com.cn
  解析 变量t是一个Person对象,但是它是用Teacher实例化的,这个问题涉及到java的编译时多态和运行时多态的问题,就编译时多态来说,t实际上是一个Person类,这涉及到类型的自动转换(将一个子类的实例赋值给一个父类的变量是不用进行强制类型转换,反之则需要
  进行强制类型转换,而且被赋值的变量实际上应该是一个子类的对象),如果对t调用了子类中新增的方法则造成编译时错误编译将不能通过,而在运行时,运行时系统将根据t实际指向的类型调用对应的方法,对于本例来说,t.print(10)将调用t实际指向的Teacher类的对应方法。在java中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是一个父类实例,在运行时可能是一个子类实例。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP