2017-10-28 2 views
-2

わかりましたので、インタフェースこれらのメソッドはどこから呼び出されていますか?

interface Action { 
    void doSomething(); 
} 

そして、私はインターフェイスの参照を作成し、クラスのオブジェクトを割り当てる場合は今インターフェース

class Greeting implements Action { 

    public String getGreeting() { 
     return "Hello, World!" ; 
    } 

    public void doSomething() { 
     System.out.println(getGreeting()); 
    } 

} 

を実装するクラスを考えてみ

Action action = new Greeting(); 
action.doSomething(); // Calls the getGreeting() method and prints it. 

方法これは機能しますか?

+0

「アクションアクション=新しいグリーティング();」のように、インターフェースを「アクション」と明示的に要求しました。インタフェースを使用するサブクラスによって実装される追加のメソッドはすべて無効です。 – StuartLC

+0

アクションタイプからアクションvariabeを定義するため、getGreeting()メソッドが表示されません。 Greetingクラスでは、getGreeting()メソッドはローカルメソッドとしてアクセスできます。 – M2E67

+0

'Greetingがアクションを実装します'。それは 'アクション'の代わりに 'アクション'でなければならないのでしょうか? –

答えて

1

Actionの変数actionを宣言しました。

これは、そのインターフェイスの一部であるメソッドのみを使用できることを意味します。

あなたはそれを呼び出すと、それはあなたの実装に委任され、すなわちGreeting

1

actionはタイプActionであり、その型はgetGreeting()メソッドを持っていないので、あなたはそのエラーを見ています。

あなたはgetGreeting()へのアクセスを必要とするいずれかのGreetingとしてactionを宣言する場合:

Greeting action = new Greeting(); 
action.getGreeting(); //should work 

それともGreetingactionをキャスト:

Action action = new Greeting(); 
((Greeting)action).getGreeting(); //Again, should work 
1

あなたはGreetingActionへのタイプのあなたのオブジェクトを割り当てました。 GreetingのオブジェクトにはgetGreeting()というメソッドがありますが、Actionタイプはそれを理解できません。

Actionオブジェクトを試してみる理由は、getGreetingメソッドはサポートされていません。

関連する問題