从Java 5开始,我们被允许具有协变返回类型。Java API为什么不利用此优势?
举个Graphics2D.create()例子。为什么不重写以返回Graphics2D对象?在我看来,它将在所有情况下都向后兼容。
Graphics2D.create()
Graphics2D
通常,这确实是为了保持向后兼容性。请注意,兼容性也必须保持在字节码级别,并且更改返回类型也会更改字节码。因此,通常来说,如果有任何子类可能覆盖了所讨论的方法,那么切换到协变返回类型将破坏这些类。
由于Graphics2D是抽象的,因此显然要进行子类化,因此适用上述推理。
Java Generics and Collections尽管更着重于泛型观点,但在8.4节中讨论了协变量重写。