2017-10-28 288 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

當你這樣做時,你已經明確地要求接口'Actions':Action action = new Greeting();'。子類使用接口實現的任何其他方法都是禁用的。 – StuartLC

+0

您可以根據Action類型定義動作變量,因此無法查看getGreeting()方法。在Greeting類中,方法getGreeting()可以作爲本地方法訪問。 – M2E67

+0

'問候貫徹行動'。不應該是'Action'而不是'Actions'? –

回答

1

您已聲明Action類型的變量action

這意味着您只能使用屬於該接口一部分的方法。

當你調用它,它委託​​給您的實現,即Greeting

1

您所看到的錯誤,因爲actionAction類型和類型沒有一個getGreeting()方法。

如果您需要訪問getGreeting()要麼宣佈action作爲Greeting

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

或澆鑄的actionGreeting

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

您已向其分配的Greeting對象Action類型。雖然Greeting的對象有方法getGreeting()Action類型不明白它。

這就是當您嘗試Action對象時,getGreeting方法不受支持的原因。