覆盖/禁用超级接口方法

问题描述:

考虑接口覆盖/禁用超级接口方法

public interface SuperInterface { 

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

} 

public interface SubInterface extends SuperInterface { 

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

} 

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

OR

上午我做错了?什么是设计这个规范的正确方法?

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

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

我做错了吗?

是的,当然。

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

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

否。当您重写某个方法时,它必须具有相同数量和类型的参数。目前你在超载execute方法在SubInterface

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

你的SubInterface应该是abstract类。

然后你可以有一个默认和final执行one-arg execute其实际上调用two-arg execute

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

是一个接口,它不会允许覆盖。 bcz覆盖是与定义相关的术语,但接口方法没有。

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

例如

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,我认为您将能够在子接口中为该方法创建一个默认方法,并在有人执行该方法时引发异常(当然,实现类不应实现该方法:)