Java SE5 中添加了协变返回类型,它表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型。
这时《编程思想》对于协变返回类型的描述,听着很绕口是不是?来看看下面例子:
public class People {
public Object process() {
return new Object();
}
}
public class Man extends People {
/*
* Man继承了People,并覆盖了其process()方法
*/
@Override
public String process() {
return new String("hello");
}
public static void main(String[] args) {
Man m = new Man();
System.out.println(m.process());
}
}
输出结果:
hello
基类process()
方法返回类型为Object
,而导出类覆盖了process()
方法,将其返回类型改为String
,程序仍可正常执行,这就是协变返回类型。
简而言之,协变返回类型即允许导出类中重写了的成员方法返回基类中被重写方法更窄的类型。