前言
Java SE5中添加了协变返回类型,它表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型:
示例源码
package com.mufeng.theeighthchapter;
class Grain {
@Override
public String toString() {
// TODO Auto-generated method stub
return "Grain";
}
}
class Wheat extends Grain {
@Override
public String toString() {
// TODO Auto-generated method stub
return "Wheat";
}
}
class Mill {
Grain process() {
return new Grain();
}
}
class WheatMill extends Mill {
Wheat process() {
return new Wheat();
}
}
public class CovariantReturn {
public static void main(String[] args) {
Mill m=new Mill();
Grain g=m.process();
System.out.println(g);
m=new WheatMill();
g=m.process();
System.out.println(g);
}
}
输出结果
Grain
Wheat
源码解析
Java SE5与
Java较早版本之间的主要差异就是较早的版本将强制
process()的覆盖版本必须返回
Grain,而不能返回
Wheat,尽管
Wheat是从
Grain导出的,因而也应该是一种合法的返回类型。协变返回类型允许返回更具体的
Wheat类型。