无法在子类中创建返回类型Object的方法

时间:2016-03-01 08:57:34

标签: java oop

我是Java初学者,在学习的过程中我遇到了这个程序。

Class One是超级课程。第二类扩展一和三扩展二。

class One {
public One foo() {
return this;
}
}
class Two extends One {
  public One foo() {
   return this;
  }
}
class Three extends Two {
  public Two foo() {
   return this;
  }
}

这里在Class 3中,当我创建一个返回类型为2的Method foo时,没有编译错误,但是当我创建返回类型" Object"如下所示,存在编译错误。

class Three extends Two {
  public Object foo() {
   return this;
  }
}

从我到目前为止学到的东西,Object是所有类的超类。为什么我不能创建一个返回类型的方法" Object"在一个儿童班?

2 个答案:

答案 0 :(得分:4)

失败是因为返回的类应该是One或其子类(例如Two),保证也是One;而不是它的超类(例如Object),就编译器而言,它可以是除One以外的任何其他类。

class Three extends Two {
  public Two foo() { // works because Two is a subclass of One
   return this;
  }
}

但是

class Three extends Two {
  public Object foo() { // fails because Object is not a subclass of One
   return this;
  }
}

答案 1 :(得分:0)

如果您对{strong>变量 return type了解Overriding概念,那么您必须知道在子class重写方法必须{{1} return类方法相同的类型包含或任何super(Co-varient类类型)。Co-Variant Return Type Example

child Class
  

注意: - 在此代码中,您将返回class Three extends Two { public Object foo() { return this; } } 类。这是所有类的object ,而不是Child,因此它是一种非法的编译代码。

你可以试试这个......

super

OR

class Three extends Two {
  public Two foo() { // works because Two is a subclass of One
   return this;
  }
}

两者都有效。根据您的需要使用。谢谢