重写时返回返回值类型可以是协变的,即子类重写方法的返回值类型不必与父类相应方法的返回值类型完全相同,而可以是父类方法返回值类型的子类型,即更狭窄的类型。
重写时参数类型可以是逆变的,即子类重写方法的参数类型不必与父类相应方法的参数类型完全相同,而可以是父类方法参数类型的父类型,而可以是更宽泛的类型。
Java支持协变,不支持逆变。逆变会被认为是重载。C++同Java相同。
C#不支持协变,也不支持逆变。