【问题标题】:Java - Overloaded method takes interfaces for arguments. Which method is called and why?Java - 重载方法采用接口作为参数。调用了哪个方法,为什么?
【发布时间】:2017-04-13 14:37:58
【问题描述】:

我有一个实现两个接口的对象(特别是Serializablejava.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 接口而没有其他方法的歧义?

【问题讨论】:

  • 您使用的其他类型是什么?这些别的东西

标签: java ambiguous


【解决方案1】:

之所以有效并且调用test(java.security.Key k) 是因为java.security.Key 扩展了Serializable 本身,因此java.security.Key Serializable 更专业 并且在方法调用上是首选。

猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 2017-03-05
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多