我知道 Java 接口(interface)无法实例化。但我在查看 Java API 中的匿名类解释时发现了一个示例,其中包括创建接口(interface)的对象。这怎么可能? 部分代码:
public class HelloWorldAnonymousClasses {
interface HelloWorld {
public void greet();
public void greetSomeone(String someone);
}
public void sayHello() {
class EnglishGreeting implements HelloWorld {
}
HelloWorld englishGreeting = new EnglishGreeting(); //object 1
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde"; public void greet() { greetSomeone("mundo");}
public void greetSomeone(String someone) {
name = someone; System.out.println("Hola, " + name);} }};
对象englishGreeting
很好,因为对象类型是接口(interface)HelloWorld
,但引用转到对象类型EnglishGreeting
。
- 现在的问题是关于对象
frenchGreeting
。既然它创建了HelloWorld
对象,而HelloWorld
是一个接口(interface),那么这怎么可能有效呢?如何实例化接口(interface)类型。我找不到支持此示例的解决方案。我们可以实例化内部接口(interface)吗? - 链接:https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
最佳答案
它不是创建接口(interface)的实例,而是创建实现HelloWorld接口(interface)
的匿名类
的实例。
如果使用 javac 编译代码,您将看到编译器将为匿名类
生成类文件,如下所示
HelloWorld$1.class
现在,如果您使用 javap
反编译生成的类文件,您将看到它实现了 HelloWorld
关于Java API 显示了实例化接口(interface)的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511354/