覆盖/禁用超级接口方法

时间:2013-03-07 12:09:31

标签: java interface

考虑接口

public interface SuperInterface {

  public void execute(Map<String,object> argument);

}

public interface SubInterface extends SuperInterface {

  public void execute(Argument extra , Map<String,Object> args);

}

是否可以使用SuperInterfaces.execute完全覆盖SubInterface.execute,即使它有不同的参数?

OR

我做错了吗?设计此规范的正确方法是什么?

5 个答案:

答案 0 :(得分:5)

没有。覆盖方法时,它必须具有相同数量和类型的参数。目前,您在<{1}}中重载 execute方法。

但是,您可以从SubInterface的实施中致电execute(Map<String, Object> args) execute(Argument extra , Map<String, Object> args)

答案 1 :(得分:3)

  

是否可以完全覆盖SuperInterfaces.execute   SubInterface.execute即使它有不同的参数吗?

如果您被允许这样做,您将违反协议。

  

我做错了吗?

是的,当然。

  

设计此规范的正确方法是什么?

你不能违反协议。所以,你不能这样做。

答案 2 :(得分:0)

您的SubInterface应该是abstract班级。

然后,您可以实现final的默认one-arg execute实施,实际调用two-arg execute

答案 3 :(得分:0)

我怀疑我是否理解你的问题。 重写是在子类/接口中使用相同的参数(或子类型参数)重新定义方法。 在这里你重载方法。

作为一个界面,它不会允许覆盖。 bcz overriding是一个与defination相关的术语,但是接口方法没有。

答案 4 :(得分:0)

你可以做的最好的事情是@Deprecate(d)方法。

e.g。

    public interface SuperInterface {

      public void execute(Map<String,object> argument);

    }

    public interface SubInterface extends SuperInterface {

      @Deprecated
      public void execute(Map<String,object> argument);
      public void execute(Argument extra , Map<String,Object> args);

    }

这样,您(和其他人)将收到有关无法使用类方法的通知。 如果您等待Java8,我认为您将能够在子接口中为该方法创建一个默认方法,并在有人执行时抛出异常(当然实现类不应该实现该方法:)