我们可以创建一个接口的对象吗?

2022-09-01 08:01:12
interface TestA {
    String toString();
}

public class Test {
    public static void main(String[] args) {
        System.out.println(new TestA() {
            public String toString() {
                return "test";
            }
        });
    }
}

结果如何?

A. 检验
B. 空
C.运行时会引发异常。
D. 由于第 1 行中的错误,编译失败。
E. 由于第 4 行中的错误,编译失败。
F. 由于第 5 行中的错误,编译失败。

这个问题的答案是什么,为什么?关于这个问题,我还有一个问题。在第 4 行中,我们将创建一个 A 的对象。是否可以创建接口的对象?


答案 1

您在这里看到的是一个匿名的内部类

给定以下接口:

interface Inter {
    public String getString();
}

您可以创建类似它实例的内容,如下所示:

Inter instance = new Inter() {
    @Override
    public String getString() {
        return "HI";
    }
};

现在,您有一个已定义接口的实例。但是,您应该注意,您实际所做的是定义一个类,该类实现接口并同时实例化该类。


答案 2

test应该是输出。这是一个匿名内部类的示例。

这是一种非常常见的模式,与接口一起使用,作为闭包的模拟。Comparator