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页
方法重写仅在两个方法的名称和类型声明相同时才发生。如果不同,那么两个方法就只是重载了。--------------------------
我的问题是:没有继承关系也能重载么??
就象别人给我的答案,那样......给我一个明确的解释...感谢了

解决方案 »

  1.   

    SCJP不是继承了Programmer吗?另外返回值又集成关系是JDK5.0新加的协变规则。
      

  2.   

    哪个XX给的答案啊,都不对。不管是重载还是覆盖都不能改变一个函数的返回值(类型)
    A正确 B正确是因为SCJP 是子类,其他都不对。不信自己编译以下看看
      

  3.   

    >>哪个XX给的答案啊,都不对。不管是重载还是覆盖都不能改变一个函数的返回值(类型)
    >>A正确 B正确是因为SCJP 是子类,其他都不对。不信自己编译以下看看既然是overload,何来改变一个函数的返回值的说法???
    btw:编译了。e,f正确.
      

  4.   

    我的问题是:没有继承关系也能重载么??
    就象别人给我的答案,那样......给我一个明确的解释...感谢了 to saint13(小新) 
    ----------
    >>既然是overload,何来改变一个函数的返回值的说法???
    >>btw:编译了。e,f正确.对了,你和我的想法是一样的....反正我也run了一下...能通过的是A,B,E,F但是别人给我的E,F的解释 : 重载....我真的还是不明白....为什么呢???
      

  5.   

    CSDN的这个论坛,应该支持贴图吧??????图:
    http://www.matrix.org.cn/resource/upload/forum/2007_08_17_093240_kvzSEvyWcQ.jpg
      

  6.   

    to macleo:
    重载,也就是所谓的overload.
    是指多个函数具有相同的名称,但每个的参数列(argument list)不同.建议阅读 thinking in java 的Method overloading一节.
      

  7.   

    to saint13(小新)
    ------------------------------
    pdf版的书,都一堆了...呵呵...谢谢...你....
    我觉得还是我gklovejava兄弟和你说的对......结贴了...我没有多少分...感谢..."建议阅读 thinking in java 的Method overloading一节."就候捷翻的那本书吧?我有的!好吧!我看看,谢谢!
      

  8.   

    to C_ying() 
    -------------------------------
    你是不是菜鸟,不是我关心的...反正的就你的说法,我感觉,要是你做这个题...结果和我一样...因为:
    “重写是指在子类中重写父类的方法``
    重载就是在同一个类里面的!而且方法的参数列表一定要不同~```”
    无法解释编译结果,可答案....啊
      

  9.   

    to lbfhappy(千里冰封) 
    ------------
    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却为无法通过呢???
      

  10.   

    to  gongyali2005(JAVA 民工)
    -----------------
    老大,B也是可以编译通过的...你这么说绝对没有run一下,你run一下就知道,B是否正确了?
      

  11.   

    虽然帖子已经结贴了,但是我还是有点不是很明白,既然EF是方法的重载,但是不是重载的定义中不是说“在Java中,同一个类中的2个或2个以上的方法可以有同一个名字”,但是这里SCJP这个类中只有debug一个方法,那怎么谈得上是重载呢?
      

  12.   

    哦 你的那个问题 最好就去问sun公司咨询部的  关于这方面的认证最好问清楚点 意义重大啊  sun公司咨询部的 你可以发邮件到[email protected]  或者在QQ线咨询 希望她能解决你百度贴吧的那个问题。她还是个美女哦!
      

  13.   

    哦 你的那个问题 最好就去问sun公司咨询部的  关于这方面的认证最好问清楚点 意义重大啊  sun公司咨询部的 你可以发邮件到[email protected]  或者在QQ线咨询 希望她能解决你百度贴吧的那个问题。她还是个美女哦!