Java API 显示了实例化接口(interface)的示例

标签 java interface anonymous-function anonymous-class

我知道 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/

相关文章:

javascript - 自定义去抖动功能不适用于匿名功能

c++ - 在其他函数或循环中构造 lambda 时是否存在性能问题?

haskell - 匿名类型函数

java - 关于将单例的构造函数说明符从 private 更改为 protected

java - Maven 发布插件 : create tag withhout SNAPSHOT depencencies

java - 如果连接被数据库关闭,我是否需要手动关闭它?

Java:如何在覆盖已弃用成员的派生接口(interface)中避免弃用警告?

C# 等效于 VB.NET 接口(interface)实现

java - 如何在 JComboBox 中加载树?

c# - C# 如何消除方法调用中多个接口(interface)之间的歧义?