Given: 1. class Programmer {
2. Programmer debug() { return this; }
3. }
4. class SCJP extends Programmer {
5. // insert code here
6. } Which, inserted at line 5, will compile? (Choose all that apply.) A. Programmer debug() { return this; } B. SCJP debug() { return this; } C. Object debug() { return this; } D. int debug() { return 1; } E. int debug(int x) { return 1; } F. Object debug (int x) { return this; } -------------------------------------------
以下是别人给我的答案:
这题考重写,什么是重写方法?
返回值,方法名,参数个数,作用域不能降低,jdk5中规定,子类重写父类的方法,返回值类型,可以是父类返回值类型的子类A. Programmer debug() { return this; } //正确,完全和父类方法一样,覆盖(重写)B. SCJP debug() { return this; } //正确,返回值类型是父类返回值类型的子类,覆盖(重写)C. Object debug() { return this; } //错误,违反重写的原则,返回值类型不是父类的返回值类型的子类D. int debug() { return 1; } //错误,违反重写的原则,返回值类型不是父类的返回值类型的子类E. int debug(int x) { return 1; } //正确,重载(注意是重载,不是重写)F. Object debug (int x) { return this; }//正确,重载(注意是重载,不是重写)
---------------------------
以下是我从书上摘录的
关于重载的说明:
摘自《Java J2SE 5Edition参考大全》98页:
重载:在Java中,同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声明不同就行。
在这种情况下,我们说方法被重载(overloaded)了,这个过程被称为方法重载(method overloading)。
方法重载是Java实现多态性的方式之一,是Java最激动人心和最有用的特征之一。134页
重写:在类层次中,当一个子类中的方法与其超类中的方法具有同样的名称和类型声明时,从子类中的方
法重写了超类中的方法,从子类中调用重写方法时,它总是引用由该子类定义的方法,而超类定义的方法
将被隐藏。135页
方法重写仅在两个方法的名称和类型声明相同时才发生。如果不同,那么两个方法就只是重载了。--------------------------
我的问题是:没有继承关系也能重载么??
就象别人给我的答案,那样......给我一个明确的解释...感谢了
2. Programmer debug() { return this; }
3. }
4. class SCJP extends Programmer {
5. // insert code here
6. } Which, inserted at line 5, will compile? (Choose all that apply.) A. Programmer debug() { return this; } B. SCJP debug() { return this; } C. Object debug() { return this; } D. int debug() { return 1; } E. int debug(int x) { return 1; } F. Object debug (int x) { return this; } -------------------------------------------
以下是别人给我的答案:
这题考重写,什么是重写方法?
返回值,方法名,参数个数,作用域不能降低,jdk5中规定,子类重写父类的方法,返回值类型,可以是父类返回值类型的子类A. Programmer debug() { return this; } //正确,完全和父类方法一样,覆盖(重写)B. SCJP debug() { return this; } //正确,返回值类型是父类返回值类型的子类,覆盖(重写)C. Object debug() { return this; } //错误,违反重写的原则,返回值类型不是父类的返回值类型的子类D. int debug() { return 1; } //错误,违反重写的原则,返回值类型不是父类的返回值类型的子类E. int debug(int x) { return 1; } //正确,重载(注意是重载,不是重写)F. Object debug (int x) { return this; }//正确,重载(注意是重载,不是重写)
---------------------------
以下是我从书上摘录的
关于重载的说明:
摘自《Java J2SE 5Edition参考大全》98页:
重载:在Java中,同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声明不同就行。
在这种情况下,我们说方法被重载(overloaded)了,这个过程被称为方法重载(method overloading)。
方法重载是Java实现多态性的方式之一,是Java最激动人心和最有用的特征之一。134页
重写:在类层次中,当一个子类中的方法与其超类中的方法具有同样的名称和类型声明时,从子类中的方
法重写了超类中的方法,从子类中调用重写方法时,它总是引用由该子类定义的方法,而超类定义的方法
将被隐藏。135页
方法重写仅在两个方法的名称和类型声明相同时才发生。如果不同,那么两个方法就只是重载了。--------------------------
我的问题是:没有继承关系也能重载么??
就象别人给我的答案,那样......给我一个明确的解释...感谢了
A正确 B正确是因为SCJP 是子类,其他都不对。不信自己编译以下看看
>>A正确 B正确是因为SCJP 是子类,其他都不对。不信自己编译以下看看既然是overload,何来改变一个函数的返回值的说法???
btw:编译了。e,f正确.
就象别人给我的答案,那样......给我一个明确的解释...感谢了 to saint13(小新)
----------
>>既然是overload,何来改变一个函数的返回值的说法???
>>btw:编译了。e,f正确.对了,你和我的想法是一样的....反正我也run了一下...能通过的是A,B,E,F但是别人给我的E,F的解释 : 重载....我真的还是不明白....为什么呢???
http://www.matrix.org.cn/resource/upload/forum/2007_08_17_093240_kvzSEvyWcQ.jpg
重载,也就是所谓的overload.
是指多个函数具有相同的名称,但每个的参数列(argument list)不同.建议阅读 thinking in java 的Method overloading一节.
------------------------------
pdf版的书,都一堆了...呵呵...谢谢...你....
我觉得还是我gklovejava兄弟和你说的对......结贴了...我没有多少分...感谢..."建议阅读 thinking in java 的Method overloading一节."就候捷翻的那本书吧?我有的!好吧!我看看,谢谢!
-------------------------------
你是不是菜鸟,不是我关心的...反正的就你的说法,我感觉,要是你做这个题...结果和我一样...因为:
“重写是指在子类中重写父类的方法``
重载就是在同一个类里面的!而且方法的参数列表一定要不同~```”
无法解释编译结果,可答案....啊
------------
A. Programmer debug() { return this; } //正确,完全和父类方法一样,覆盖(重写)B. SCJP debug() { return this; } //正确,返回值类型是父类返回值类型的子类,覆盖(重写)C. Object debug() { return this; } //错误,违反重写的原则,返回值类型不是父类的返回值类型的子类D. int debug() { return 1; } //错误,违反重写的原则,返回值类型不是父类的返回值类型的子类E. int debug(int x) { return 1; } //正确,重载(注意是重载,不是重写)F. Object debug (int x) { return this; }//正确,重载(注意是重载,不是重写)你的意思是上边的注释你不认同么??那如何解释...编译可以通过的ABEF,而CD却为无法通过呢???
-----------------
老大,B也是可以编译通过的...你这么说绝对没有run一下,你run一下就知道,B是否正确了?