2017-06-29 7 views
0

クラスA、B、CおよびインタフェースBImplがあるとします。 Aにおいてスーパークラスからインスタンスを経由してメソッドを取得する

我々はBImplを通じてBのインスタンスを作成する:Bにおいて

class A { 

    BImpl bimpl; 

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

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

我々は(方法getWordsを有する)がBImplインターフェイスから上書きされています。このメソッドは、スーパークラスからretrieveLanguageDict()を呼び出します。

私が必要だった場合、クラスAのretrieveLanguageDict()メソッドをどのように呼び出すのですか?

+0

'B'型のフィールドを宣言し、その型のメソッド宣言が見えるようにします。すべてのBImplがあなたが探しているメソッドを持っている必要はありません。 –

答えて

-1

このメソッドはprotectedです。これは、クラス自体、そのサブクラス、および同じパッケージ内の他のクラスによってのみ呼び出すことができます。

さらに、クラスAはインターフェイスBImplを使用して作業しています。参照bimplでアクセスできる唯一のメソッドは、Bimplインタフェースで宣言されたものです。

retrieveLanguageDict()をインターフェイスのメンバーにし、そのアクセス制御をpublicに変更することで、この問題を解決できます。

つまり、retrieveLanguageDict()がBImplの実装者の実装の詳細であるかどうかを検討することもできます。もしそうなら、でなく、BImplの実装外から呼び出すほうが良いでしょう。

関連する問題