Java是如何支持通过重写方法的匿名类来实例化接口的? [重复]

问题描述 投票:0回答:1

在 Java 中,接口是抽象构造,无法自行实例化,因为它们缺乏具体的实现——它们通过方法签名定义契约,而不提供这些方法的主体。通常,接口由具体类实现或由其他接口扩展。

然而,当我在学习 Java 时偶然发现匿名类时,我惊讶地发现它们似乎允许接口的直接实例化。匿名类语法允许您动态提供接口方法的实现。

这里有一个例子来说明这个概念:

interface Greeter {
    void greet();
}

public class HelloWorld {
    public static void main(String[] args) {
        Greeter greeter = new Greeter() {
            @Override
            public void greet() {
                System.out.println("Hello, world!");
            }
        };
        greeter.greet();
    }
}

在上面的示例中,Greeter 是一个具有单个方法greet 的接口。在 main 方法中,我使用匿名类创建了一个 Greeter 的“实例”,该类提供了greet 方法的实现。

java
1个回答
2
投票

匿名内部类不是接口的发起者。 它创建一个实现所引用接口的匿名类。

这只是一个类及其实现的本地启动。

就像评论中提到的abra一样,你如何定义接口它是一个函数式接口,从java 8开始你的代码可以重写为:

interface Saludadores {
    void saludar();
}

public class training3 {
    public static void main(String[] args) {
        Saludadores saludador = () -> System.out.println("Hola, mundo!");
        saludador.saludar();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.