从哪里调用这些方法?

时间:2017-10-28 11:11:23

标签: java methods scope polymorphism

好的,考虑一下接口

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.

这是如何运作的?

3 个答案:

答案 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方法。