2017-06-29 80 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的实现之外调用它。