2017-04-13 50 views
1

我有一個實現兩個接口(特別是接口Serializablejava.security.Key)的對象。該對象的類還有兩個靜態方法:一個採用Serializable對象,另一個採用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()); 
    } 

} 

現在,當我運行上面的主要方法,不會引發錯誤和Java調用test(Key)方法。但是,當我改變Serializable接口別的東西(我改變了test(Serializable)參數和改變Subclass超級接口)到別的東西,我的IDE顯示我的錯誤:

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

我想知道什麼是,爲什麼Java允許這種方法與Serializable界面模糊不清,而且沒有其他方法?

+3

你使用的其他類型是什麼?這些*別的*的 –

回答

6

這個作品和test(java.security.Key k)被稱爲的原因是因爲java.security.Key延伸Serializable本身,因此java.security.Key更專門Serializable並且是優選的方法調用。

+0

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

相關問題