函数返回接口意味着什么?

jas*_*son 30 java

我刚看到一个这样的成员函数:

public Cat nextCat(GameState state); 
Run Code Online (Sandbox Code Playgroud)

但Cat是这样的界面:

public interface Cat {
        void makeCat(GameState state);
}
Run Code Online (Sandbox Code Playgroud)

所以我很困惑如何解释这个.我知道当某些东西返回一个对象或一个原语时它意味着什么.但是返回界面意味着什么?如何使用此函数的返回值?

Joa*_*uer 37

想想这样的方式:如果Cat在常规课程中,当你想要调用某些方法时,你究竟会关心什么?

您需要关心方法定义:它们的名称,它们的参数类型,它们的返回值.你并不需要关心实际的实现!

由于接口提供了所有这些,您可以在其上调用方法,就像在常规类上一样.

当然,为了使方法实际返回某个对象,需要有一些在某处实现该接口的类.但是实际上是什么类或者它如何实现这些方法对于获得该对象返回的代码并不重要.

换句话说,您可以编写如下代码:

Cat cat = nextCat(GameState.STUFF);
cat.makeCat(GameState.OTHER_STUFF);
Run Code Online (Sandbox Code Playgroud)

该代码不了解实现Cat接口的具体类型,但它知道该对象可以执行Cat接口所需的所有操作.


Dhr*_*ola 8

此函数返回实现Cat接口的类的对象.只要您为它实现Cat接口的所有方法,实现细节(对于此具体类)由您决定.


Adr*_*ter 6

例如你可以这样做:

interface Cat {
    String meeeeow();
}

public Cat nextCat(GameState state) {
    return new Cat() {
        public String meeeeow() {
            return "meeeeeeeeeow!!!!";
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,nextCat 方法通过“匿名内部类”返回 Cat 接口的实现。这说明调用 nextCat 的代码不需要知道哪个代码实现了返回的 Cat 接口。这是面向对象编程的关键优势之一的示例:因为调用代码不知道实现,所以以后更改实现的影响很小(只要接口保持不变)。

  • 啊哈......“匿名内猫” (3认同)