質問: arg; } public void someMethod() { reference.callbackMethod(); // reference.cannnotCallFromClassB(); // エラーが出るよ } } ここで、質問なのですが、 なぜ ClassB から cannotCallFromClassB() メソッドを呼べないのですか? コメントアウトされている “インタフェースに記述されてないので、ClassBから呼ぶことができない。” という理由も納得できません。 上記について、教えて頂きたいです。 宜しくお願いしします。
回答: > > “インタフェースに記述されてないので、ClassBから呼ぶことができない。” という理由 > > > referenceがICallBackを実装しているということしか、classBは知らないからです。 cannnotCallFromClassBメソッドを定義しているのは、あくまでClassAなのです。 逆に言えば referenceがClassAのインスタンスであると確約してやれば、強引な呼び出しも可能です。 ``` public void someMethod() { ClassA classA = (ClassA)reference; classA.callbackMethod(); classA.cannotCallFromClassB(); // エラーが出ないよ } ``` 本質的にはClassA#cannotCallFromClassBをpublicにしているのが問題のように思えます。 コードの書き方について teratailには、上記のようにコードを見やすく表示する機能があります。 質問編集画面を開き、コードを選択した状態でボタンを押してください。 !Java また、URLにリンクを貼ることも可能ですので、それも試してみてください。 例えばこんな風に貼れます: teratail