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