协变返回类型
JavaSE5 中添加了协变返回类型,它表示在导出类中的被覆盖方法可以可以返回基类方法的返回类型的某种导出类型:
class Grain{
public String toString() { return "Grain";}
}
class Wheat extends Grain{
public String toString() { 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 = new Grain();
System.out.println(g);
m = new WheatMill();
g = m.process();
System.out.println(g);
}
}/* Output:
Grain
Wheat
*///:~
总结:
JavaSE5 与Java较早版本之间的主要差异就是较早版本将强制process( )的覆盖版本必须返回Grain,而不能返回Wheat,尽管Wheat是从Grain中导出的,因而也应该是一种合法的返回类型。协变返回类型允许返回更具体的Wheat类型。
多态意味着“不同的形式“。在面向对象的程序设计中,我们持有从基类继承而来的相同接口,以及使用该接口的不同形式:不同版本的动态数据绑定方法。