2017-04-13 4 views
1

私は2つのインターフェース(具体的にはSerializablejava.security.Keyインターフェース)を実装するオブジェクトを持っています。このオブジェクトのクラスには、Serializableオブジェクトを取るメソッドとKeyオブジェクトを取るメソッドという2つの静的メソッドもあります。私は上記のmainメソッドを実行すると、エラーがスローされないとJavaはtest(Key)メソッドを呼び出しているJava - オーバーロードされたメソッドは引数のためのインタフェースをとります。どちらの方法が呼び出され、なぜですか?

public class Subclass implements Serializable, java.security.Key{ 
    public static void test(Serializable s) { 
     System.out.println("Ser"); 
    } 
    public static void test(java.security.Key k) { 
     System.out.println("Key"); 
    } 

    public static void main(String[]args){ 
     test(new Subclass()); 
    } 

} 

:ここではいくつかのサンプルコードです。私が知りたいのは何

The method test(Key) is ambiguous for the type SubClass .

:しかし、私は何か他のものにSerializableインターフェイスを変更する場合、(私はtest(Serializable)でパラメータを変更し、Subclassのスーパーインタフェースを変更する)何か他のものに、私のIDEは私にエラーを示しますなぜ、JavaはSerializableインターフェースでこの種のメソッドのあいまいさを許しているのですか? java.security.Keyjava.security.KeySerializableよりより特殊とメソッド呼び出しに好ましいしたがって、Serializable自体延びため

+3

あなたが使った他のタイプは何ですか?これらの*その他のもの* –

答えて

6

この作品とtest(java.security.Key k)と呼ばれる理由です。

+0

https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2.5 –

関連する問題