2013-03-07 71 views
2

考慮接口覆蓋/禁用超級接口方法

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

上午我做錯了?什麼是設計這個規範的正確方法?

回答

3

是否有可能完全覆蓋SuperInterfaces.execute與 SubInterface.execute即使它有不同的參數?

如果您被允許這樣做,您將違反協議。

我做錯了嗎?

是的,當然。

什麼是設計此規格的正確方法?

您不能違反協議。所以,你不能這樣做。

5

否。當您重寫某個方法時,它必須具有相同數量和類型的參數。目前你在超載execute方法在SubInterface

但是,您可以從您的SubInterface的實施中調用execute(Map<String, Object> args)execute(Argument extra , Map<String, Object> args)

0

你的SubInterface應該是abstract類。

然後你可以有一個默認和final執行one-arg execute其實際上調用two-arg execute

0

我懷疑我是否理解你的問題。 重寫是使用相同的參數(或子類型參數)在子類/接口中重新定義方法。 在這裏你重載的方法。

是一個接口,它不會允許覆蓋。 bcz覆蓋是與定義相關的術語,但接口方法沒有。

0

您可以做的最好的事情是@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,我認爲您將能夠在子接口中爲該方法創建一個默認方法,並在有人執行該方法時引發異常(當然,實現類不應實現該方法:)