2013-10-07 24 views
0

我有一個接口IOuter和一個嵌套接口IInner。像如何調用嵌套接口的方法

interface IOuter { 
    public void outerA(); 
    interface IInner { 
     public void innerA(); 
    } 
} 

兩個IOuterIInner現在遇到了二傳手的API。
我做了嵌套接口,因爲setter API只對內部接口有效。
外部和內部接口都是在一個單獨的類中實現的,它不會暴露在外部世界。
外部應用程序通過接口IOuter與我們的代碼進行交互。現在的問題是,因爲他們沒有嵌套接口的對象,他們無法調用嵌套的接口API。
我不想將嵌套的接口API移動到外部接口,因爲它可能會被誤解。

+0

我認爲這個問題是未知的,或者我沒有正確地問過它。這兩個接口已經在我們的代碼中實現。外部應用程序不直接使用創建對象。它從某人那裏得到它。所以它只知道接口。現在,如果應用程序需要調用嵌套接口的API,它需要它的對象。爲了使它工作,我公開了一個API來獲取嵌套的接口對象。我不確定是一種正確的編碼方式。那麼還有沒有其他方式可以實現它,然後暴露和API來獲得嵌套的接口對象。 – nascent

回答

0

您可以直接調用嵌套的接口方法,如下圖所示

嘗試

public class Test implements IOuter, IOuter.IInner { 
    public static void main(String args[]) { 
     Test t1 = new Test(); 
     t1.innerA();   
    } 

    public void outerA(){  
    } 
    public void innerA(){  
    } 
} 
+0

這是錯誤的。你的'innerA()'實現不會覆蓋嵌套接口中的方法定義。使用'@ Override'註釋來證明 –

+0

'Test'中的'innerA'方法並不重寫'IInner'接口的'innerA()'。它只是你班上的一些方法,具有相同的名稱。 – SudoRahul

+0

@kocko和R.J感謝您指出錯誤,更新了代碼 – upog

2

可以同時實現IOuterIInner接口。例如: 這裏A是實現既外和內接口的:如下所示

public class Test implements IOuter, IOuter.IInner { 
    @Override 
    public void outerA() { 

    } 

    @Override 
    public void innerA() { 

    } 
} 
0

內部接口可以作爲外靜態成員直接使用或。

 IOuter o = new A(); 
     o.outer(); 

     IOuter.IInner i = new A(); 
     i.inner(); 

     //OR 
     IInner i2 = new A(); 
     i.inner();