我是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"在一个儿童班?
答案 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;
}
}
两者都有效。根据您的需要使用。谢谢