Java supports* covariant return types for overridden methods. This means an overridden method may have a more specific return type. That is, as long as the new return type is assignable to the return type of the method you are overriding, it's allowed.
例如:
class ShapeBuilder {
...
public Shape build() {
....
}
class CircleBuilder extends ShapeBuilder{
...
@Override
public Circle build() {
....
}
这在中指定Java 语言规范第 8.4.5 节 http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.5:
如果返回类型是引用类型,则返回类型可能会因相互覆盖的方法而异。返回类型可替换性的概念支持协变返回,即返回类型对子类型的特化。
当且仅当满足以下条件时,返回类型为 R1 的方法声明 d1 才可以返回类型替换为返回类型为 R2 的另一个方法 d2:
(“|R2|”指的是 R2 的擦除,如中所定义JLS §4.6 http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.6.)
* Prior to Java 5, Java had invariant return types, which meant the return type of a method override needed to exactly match the method being overridden.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)