gpt4 book ai didi

java - 能够实例化接口(interface)

转载 作者:行者123 更新时间:2023-12-01 07:50:13 25 4
gpt4 key购买 nike

我的印象是可以实例化一个接口(interface):

interface TestA { 
String toString();
}

public class Test {
public static void main(String[] args) {

System.out.println(new TestA() {
public String toString() {
return "test";
}
});
}
}

这会打印“test”。为什么?该类未实现该接口(interface)。

它还使用 new TestA() 创建它的实例,但我读到接口(interface)无法实例化。

有人可以解释一下为什么它打印成功吗?

最佳答案

发生了什么

您在这里所做的是创建一个匿名类并实例化它。所以你的对象的类型不是TestA,而实际上是匿名类的类型。

TestA myObject = new TestA(){ ... }

是:

的快捷方式
class ClassA implements TestA { ... }
TestA myObject = new ClassA();

在此示例中,尽管引用 myObject 的类型为 TestA,但引用的对象的类型为 ClassA,它实现了TestA

您可以在 Java 教程 here 中阅读有关匿名类的信息。 .

“发生了什么”的最后一步是对创建的对象调用 System.out.println,从而调用其 toString() 方法。

因此,为了分解正在发生的所有步骤,您的代码相当于:

public class Test {

public static void main(String[] args){

class ClassA implements TestA {

public String toString(){
return "test";
}
}
TestA myObject = new ClassA();
String myString = myObject.toString();
System.out.println(myString);
}
}

回答您的具体问题

因此,回答您的具体问题:

  • 事实上,您的类 Test 没有实现该接口(interface),而是匿名类实现了。它之所以这样做,是因为它被声明为实现它,并且因为它正确地实现了抽象方法 toString
  • 确实,接口(interface)无法实例化。在这种情况下,您不是实例化接口(interface),而是实例化您定义为实现该接口(interface)的匿名类。

如果您想检查第二点,您可以尝试删除匿名类定义的主体。它不会编译:

System.out.println(new TestA()); // Compile error

关于java - 能够实例化接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com