C++ and Java support return-type covariance when overriding methods.
Neither, however, support contra-variance in parameter types - instead, it translates to overl
class A { public void f(String s) {...} public void f(Integer i) {...} } class B extends A { public void f(Object o) {...} // Which A.f should this override? }