🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## [协变返回类型](https://lingcoder.gitee.io/onjava8/#/book/09-Polymorphism?id=%e5%8d%8f%e5%8f%98%e8%bf%94%e5%9b%9e%e7%b1%bb%e5%9e%8b) Java 5 中引入了协变返回类型,这表示派生类的被重写方法可以返回基类方法返回类型的派生类型: ~~~ // polymorphism/CovariantReturn.java class Grain { @Override public String toString() { return "Grain"; } } class Wheat extends Grain { @Override public String toString() { return "Wheat"; } } class Mill { Grain process() { return new Grain(); } } class WheatMill extends Mill { @Override 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 5 之前的版本强制要求被重写的`process()`方法必须返回**Grain**而不是**Wheat**,即使**Wheat**派生自**Grain**,因而也应该是一种合法的返回类型。协变返回类型允许返回更具体的**Wheat**类型。