This code is invalid:
interface Foo
{
public void foo(final String string);
}
public class Bar implements Foo
{
// Error: does not override.
@Override public void foo(final Object object)
{
}
}
Because every String
is obviously an Object
, I would expect this code to be perfectly fine: any code that depends on giving foo()
a String
would stil function when foo()
actually takes an Object
.
It appears, though, that method signatures have to be identical to those of the methods they're overriding. Why?