3.以下哪两个方法可以加到three中 
  class one{ 
    public one foo(){return this;} 
}   class two extends one{ 
    public one foo(){return this;} 

  class three extends two{ 
  //插入到这 

--- 
  A.  public void foo(){} 
  B.  public int foo(){return 1;} 
  C.  public one foo(){return this;} 
  d.  public two foo(){return this;} 
  e.  public object foo(){return this;} 

解决方案 »

  1.   

        C           CCCCCCCC 
      

  2.   

    d应该时可以的
    之前就遇到了这个问题,虽然说重写不能修改返回类型,重载必须有不同的参数表
    但是这里从现象推原因,是不是由于一个子类对象也是一个父类对象可以由父类引用指向,所以当他返回two时我们也可以把他看成也返回了one,two必要是one,所以d是对的e不对
      

  3.   

    c,d,用编译器编译一下就知道答案了,不是说两个选项同时加入three中,而是说这两个选项可以分别加入three中。从答案上来看,是问方法覆盖的。返回值兼容就可以方法覆盖。返回值one和one覆盖,two和one也可以覆盖因为two是one的子类所以是兼容的。
      

  4.   

    Java5之后重写可以实现协变式返回
      

  5.   

    必须是c,d,这个像scjp的考试题啊!
      

  6.   

    打眼一看觉得都行 哈哈  其实c、d才是正确的a 、 b  因为是方法重写错误。至于 e , 因为 Object 是 one 的父类,所以也不行
      

  7.   

    初看以为就C,后来才知道还有D....
    yun
      

  8.   

    说白了就是public one foo(){return this;}  
    中的one可以替换成two还是多态的一个特性.父类引用可以指向子类对象