为什么Java中的逆变参数类型不允许覆盖?

Wil*_*ill 17 java overriding covariance contravariance

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

为什么相比之下逆变参数类型覆盖方法允许吗?

pic*_*ypg 15

因为这称为重载.

特别是,返回类型类型可以是协变的,因为在重载时不会考虑它,因此它仍然匹配超类或接口的实现.重载时会考虑参数.与之Number doSomethingWithNumber(Integer value)相比,你很可能有一个优化Number doSomethingWithNumber(Number value).

  • @pickypg:`因为这叫做超载。`:读到这里我差点从椅子上摔下来。感谢这个有启发性的答案。+1 (2认同)