Just playing around with interfaces and I have a question about something which I can't really understand.
The following code doesn't run, which is the behaviour I expect as the interface method requires the method to work for any object and the implemented method has the signature changed to only allow string objects.
interface I { public void doSomething(Object x); } class MyType implements I { public void doSomething(String x) { System.out.println(x); } } However, using the following block of code, I was shocked to see that it did work. I thought it would not work as we are expecting to return an object and the implemented method will only return a string object. Why does this work and what is the difference between the two principles here of passed parameters and return types?
interface I { public Object doSomething(String x); } class MyType implements I { public String doSomething(String x) { System.out.println(x); return(x); } }