我有一个实现两个接口的对象(特别是Serializable
和java.security.Key
接口)。该对象的类还有两个静态方法:一个采用Serializable
对象,另一个采用Key
对象。以下是一些示例代码:
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());
}
}
现在,当我运行上面的main方法时,不会抛出任何错误,Java会调用test(Key)
方法。但是,当我将Serializable
接口更改为其他内容(我更改test(Serializable)
中的参数并将Subclass
的超级接口更改为其他内容)时,我的IDE显示错误:
方法
test(Key)
对于SubClass
类型不明确。
我想知道的是,为什么Java允许这种方法与Serializable
接口有歧义而没有其他接口?
答案 0 :(得分:6)
这可行的原因以及调用test(java.security.Key k)
是因为java.security.Key
扩展了Serializable
本身,因此java.security.Key
比{{更>专业化而不是{{} 1}}并且是方法调用的首选。