好的,考虑一下接口
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 :(得分:1)
您已声明类型为action
的变量Action
。
这意味着您只能使用属于该界面的方法。
当您致电时,会将其委托给您的实施,即Greeting
答案 1 :(得分:1)
您看到该错误,因为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
答案 2 :(得分:1)
您已将Greeting
的对象指定为Action
类型。虽然Greeting
的对象具有方法getGreeting()
,但Action
类型不理解它。
这是您尝试Action
对象的原因,不支持getGreeting
方法。