为什么Java中的逆变参数类型不允许覆盖? [英] Why are contravariant parameter types in Java not allowed for overriding?

查看:213
本文介绍了为什么Java中的逆变参数类型不允许覆盖?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当覆盖超类的方法时,Java允许返回类型是协变的。

When overriding a method of a superclass, Java allows the return type to be covariant.

为什么逆变参数类型相反覆盖方法时允许吗?

Why are contravariant parameter types in contrast not allowed when overriding methods?

推荐答案

因为那叫做重载

特别是,返回类型类型可以是协变的,因为重载时不会考虑它,因此它仍然匹配超类或接口的实现。重载时会考虑参数。您可以使用 Number doSomethingWithNumber(整数值)进行优化,与 Number doSomethingWithNumber(数值)进行比较。

In particular, the return type type can be covariant because it is not considered when overloading, and it therefore still matches the superclass or interface's implementation. Parameters are considered when overloading. You very well might have an optimization with Number doSomethingWithNumber(Integer value) compared to Number doSomethingWithNumber(Number value).

这篇关于为什么Java中的逆变参数类型不允许覆盖?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆