有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从哪里调用这些方法?

<>请考虑一个接口

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) 个答案

  1. # 1 楼答案

    您已经声明了类型为Action的变量action

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

    当您调用它时,它被委托给您的实现,即Greeting

  2. # 2 楼答案

    您看到该错误是因为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
    
  3. # 3 楼答案

    您已将Greeting对象分配给Action类型。虽然Greeting的对象具有方法getGreeting(),但是Action类型不理解它

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