这些方法从哪里调用?
问题描述:
好了,所以考虑一个接口这些方法从哪里调用?
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.
如何这是否工作?
答
您已声明Action
类型的变量action
。
这意味着您只能使用属于该接口一部分的方法。
当你调用它,它委托给您的实现,即Greeting
答
您所看到的错误,因为action
是Action
类型和类型没有一个getGreeting()
方法。
如果您需要访问getGreeting()
要么宣布action
作为Greeting
:
Greeting action = new Greeting();
action.getGreeting(); //should work
或浇铸的action
到Greeting
:
Action action = new Greeting();
((Greeting)action).getGreeting(); //Again, should work
答
您已向其分配的Greeting
对象Action
类型。虽然Greeting
的对象有方法getGreeting()
但Action
类型不明白它。
这就是当您尝试Action
对象时,getGreeting
方法不受支持的原因。
当你这样做时,你已经明确地要求接口'Actions':Action action = new Greeting();'。子类使用接口实现的任何其他方法都是禁用的。 – StuartLC
您可以根据Action类型定义动作变量,因此无法查看getGreeting()方法。在Greeting类中,方法getGreeting()可以作为本地方法访问。 – M2E67
'问候贯彻行动'。不应该是'Action'而不是'Actions'? –