2017-06-29 64 views
0

假設存在類A,B和C以及接口BImpl。從超類到實例獲取方法

在甲我們通過BImpl創建B的一個實例:

class A { 

    BImpl bimpl; 

    A() { 
     bimpl = new B(); 
    } 

    public void speak() { 
     bimpl.getLanguage(); 
    } 
} 

在B中,我們有一個方法getWords(),它從所述BImpl界面覆蓋。這個方法從它的超類調用retrieveLanguageDict()。

class B extends C implements BImpl { 

    @Override 
    public void getWords() { 
     retrieveLanguageDict(); 
    } 
} 

interface BImpl { 
    void getWords(); 
} 

class C { 

    protected void retrieveLanguageDict() { 

    } 
} 

我的問題是:如果我需要,我將如何調用從A類方法retrieveLanguageDict()?

+0

聲明「B」類型的字段,以便方法聲明對該類型可見。並不是每個「BImpl」都必須有你正在尋找的方法。 –

回答

-1

該方法受保護。它只能由類本身,它的子類和其他類在同一個包中調用。

最重要的是,類A正在通過接口BImpl進行工作。通過引用bimpl可訪問的唯一方法是在Bimpl接口中聲明的方法。

您可以通過將retrieveLanguageDict()設爲界面的成員並將其訪問控制更改爲public來解決該問題。

也就是說,你也可以考慮retrieveLanguageDict()是否是BImpl的一些實現者的實現細節。如果是這樣,那麼而不是可以從BImpl的實現之外調用它。