インターフェースをいじってみると、よくわからないことがあるので質問があります。
次のコードは実行されません。これは、インターフェイスメソッドが任意のオブジェクトに対して機能するメソッドを必要とし、実装されたメソッドの署名が文字列オブジェクトのみを許可するように変更されているため、私が期待する動作です。
interface I {
    public void doSomething(Object x);
}
class MyType implements I {
    public void doSomething(String x) {
        System.out.println(x);
    }
}
しかし、次のコードブロックを使用して、それが機能するのを見てショックを受けました。オブジェクトを返すことを期待しているので、それは機能しないと思いました。実装されたメソッドは文字列オブジェクトのみを返します。これが機能する理由と、渡されたパラメーターと戻り値の2つの原則の違いは何ですか?
interface I {
    public Object doSomething(String x);
}
class MyType implements I {
    public String doSomething(String x) {
        System.out.println(x);
        return(x); 
    }
}