Question 41
41. Given: 
10. class One { 
11. public One foo() { return this; } 
12. } 
13. class Two extends One { 
14. public One foo() { return this; } 
15. } 
16. class Three extends Two { 
17. // insert method here 
18. } 
Which two methods, inserted individually, correctly complete the Three class? (Choose two.) 
A. public void foo() { } //问题一:为什么A不可以?为什么B不可以?为什么E不可以?
B. public int foo() { return 3; } 
C. public Two foo() { return this; } 
D. public One foo() { return this; }//问题二:return this以后,原本返回的是Two,可以由于标明返回类型是One所以就又有了一个操作是把返回的Two强制转换为One,是吗?
E. public Object foo() { return this; } 
Answer: CD谢谢。

解决方案 »

  1.   

    Override 重写如果在子类中定义的一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。
      

  2.   

    问题一:为什么A不可以?为什么B不可以?为什么E不可以? 
    重写问题:Three extends Two 后继承了foo()方法,如果要重写这个方法,参数、返回类型、名称都相同。而这里的三个选项返回类型都不同。就算是重载也要参数不同。问题二:return this以后,原本返回的是Two,可以由于标明返回类型是One所以就又有了一个操作是把返回的Two强制转换为One,是吗?
    不因该是强制转型,而向上转型,详细可以看《thinkjava》
    可能是你写错了,红色的地方因该是返回Three,
      

  3.   

    Override 覆盖子类覆盖父类的方法,必须要:方法名、输入参数、返回值三者都一样。为什么这不是Overload:因为子类的方法和父类的方法输入参数都一样(无参数),所以不是Overload,Overload要求:方法名必须一样,输入参数必须不同,返回值无所谓。
      

  4.   

    不好意思,小弟初涉J2SE,多多不明白,还望指教。谢谢关注。