黑马程序员技术交流社区

标题: 一道特别有意思的测试题 [打印本页]

作者: 胡建彪    时间: 2012-10-16 10:11
标题: 一道特别有意思的测试题
class A {
               protected int method1(int a, int b) { return 0; }
           }


Which two are valid in a class that extends class A? (Choose two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }

帮大家复习复习英文和Extends的知识。。。。。



作者: 刘 佳    时间: 2012-10-16 10:38
ac对吗?
作者: 胡建彪    时间: 2012-10-16 10:42
刘 佳 发表于 2012-10-16 10:38
ac对吗?

对,你怎么理解C这个选项
作者: 刘 佳    时间: 2012-10-16 10:51
胡建彪 发表于 2012-10-16 10:42
对,你怎么理解C这个选项

c是重载。
作者: 陈军    时间: 2012-10-16 11:31
本帖最后由 陈军 于 2012-10-16 11:32 编辑

A、D

D我说下自己的理解,
关于重写,我测试过。
返回类型可以是父类中该方法的子类。或者说范围可以在父类返回值类型之内,但是不能超出
至于private是权限最低的,不可能重写父类protected的方法
作者: 舒远    时间: 2012-10-16 11:31
这道题目不严谨的,因为A和D都是对父类方法的重写,所以答案有两个,AC或者CD。
作者: 刘 佳    时间: 2012-10-16 12:10
舒远 发表于 2012-10-16 11:31
这道题目不严谨的,因为A和D都是对父类方法的重写,所以答案有两个,AC或者CD。 ...

老毕不是说过D那种情况是不允许出现的吗?
作者: 舒远    时间: 2012-10-16 12:13
本帖最后由 舒远 于 2012-10-16 12:16 编辑
刘 佳 发表于 2012-10-16 12:10
老毕不是说过D那种情况是不允许出现的吗?


从java语法规范的角度来讲,D这种情况确实是能通过编译的。
对父类方法的重写是允许方法的返回类型的范围更小的。

老毕有说过?不记得了,为什么不允许出现,真心求解释?
作者: 舒远    时间: 2012-10-16 12:15
陈军 发表于 2012-10-16 11:31
A、D

D我说下自己的理解,

你没看懂题目英文的意思。
作者: 陈军    时间: 2012-10-16 12:37
本帖最后由 陈军 于 2012-10-16 12:38 编辑
舒远 发表于 2012-10-16 12:15
你没看懂题目英文的意思。


A。D覆盖,
B,C,E,不允许存在因为同名同参数列表,又没复写。java认为这不允许,
因为当在子类内部调用时,它不知道执行哪个了。

当然这是我的理解。
作者: 刘 佳    时间: 2012-10-16 12:40
舒远 发表于 2012-10-16 12:13
从java语法规范的角度来讲,D这种情况确实是能通过编译的。
对父类方法的重写是允许方法的返回类型的范围 ...

假设子类继承父类并定义了D的方法,建立子类对象调用method1的时候,你说它该返回int呢还是返回short呢?
作者: 陈军    时间: 2012-10-16 12:54
之前想错了。 纠正一下,,,

A.和C才对。。C的参数列表不一样。可以允许
B。E。同名同参列表。java不允许
D,覆盖返回值的类可以是子类,但是不能从范围上来讲。short不是int子类,
作者: 舒远    时间: 2012-10-16 13:05
我错了 。。
作者: 胡建彪    时间: 2012-10-16 18:51
舒远 发表于 2012-10-16 12:13
从java语法规范的角度来讲,D这种情况确实是能通过编译的。
对父类方法的重写是允许方法的返回类型的范围 ...

老毕说过得 重写的方法和父类是一样的,包括返回值类型, D在我的MyEclipse中编译报错,通不过的。The return type is incompatible with A.method1(int, int)
作者: 舒远    时间: 2012-10-17 09:05
胡建彪 发表于 2012-10-16 18:51
老毕说过得 重写的方法和父类是一样的,包括返回值类型, D在我的MyEclipse中编译报错,通不过的。The re ...

嗯,我确实错了,吸取教训,继续前进!
作者: android_921    时间: 2015-11-15 11:05
B&C,不是说继承者的权限不能高过父类吗,求解释




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2