这些方法从哪里调用?

问题描述:

好了,所以考虑一个接口这些方法从哪里调用?

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'? –

您已声明Action类型的变量action

这意味着您只能使用属于该接口一部分的方法。

当你调用它,它委托​​给您的实现,即Greeting

您所看到的错误,因为actionAction类型和类型没有一个getGreeting()方法。

如果您需要访问getGreeting()要么宣布action作为Greeting

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

或浇铸的actionGreeting

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

您已向其分配的Greeting对象Action类型。虽然Greeting的对象有方法getGreeting()Action类型不明白它。

这就是当您尝试Action对象时,getGreeting方法不受支持的原因。