Java 有人能解释一下,这段代码是如何创建一个实现接口的类,并实例化该类的吗?

Java 有人能解释一下,这段代码是如何创建一个实现接口的类,并实例化该类的吗?,java,spring,Java,Spring,接口 public interface MessageService { String getMessage(); } 这个班(我有疑问) 有谁能解释一下,标记在------之间的代码在类定义中没有给出任何implements关键字的情况下是如何工作的,它还可以在该行中创建该类的对象吗 您可以参考Spring快速入门指南的此链接 来自: 如果类实例创建表达式以类主体结束,则被实例化的类是匿名类。然后: 设T为ClassOrInterfaceTypeToInstate表示的类型。如果T

接口

public interface MessageService {
    String getMessage();
}
这个班(我有疑问)

有谁能解释一下,标记在------之间的代码在类定义中没有给出任何implements关键字的情况下是如何工作的,它还可以在该行中创建该类的对象吗

您可以参考Spring快速入门指南的此链接

来自:

如果类实例创建表达式以类主体结束,则被实例化的类是匿名类。然后:

设T为ClassOrInterfaceTypeToInstate表示的类型。如果Tdenotes是一个类,则声明T的一个匿名直接子类。如果Tdenotes是一个接口,则声明实现T的对象的匿名直接子类


这与Spring无关,而是与Java本身有关

您使用的是匿名类,它允许您同时声明和实例化一个类。在这里,您将声明一个匿名类,该类实现了
MessageService
并重写其
getMessage()
方法,同时实例化匿名类

请记住,匿名类与本地类具有类似的作用域和限制。主要区别在于匿名类不能被赋予类名,因此不能定义它们的构造函数。注意:匿名类可以实现单个接口(在这种情况下,语法是
newinterfacename(){…}
),也可以扩展单个具体或抽象类(在这种情况下,语法是
newclassname([参数列表]){…}

@Configuration
@ComponentScan
public class Application {
    //---------
    @Bean
    MessageService mockMessageService(){
        return new MessageService(){
            public String getMessage(){
                return "Hello World! Yash";
            }
        };
    }
    //---------
    public static void main(String[] args){
        ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
        MessagePrinter printer = context.getBean(MessagePrinter.class);
        System.out.println(printer.service.getClass().getName());
        printer.printMessage();
    }
}