首页 > 解决方案 > 使用接口引用调用非静态未实现的方法

问题描述

我正在按照这里的教程https://www.concretepage.com/spring-boot/spring-boot-security-rest-jpa-hibernate-mysql-crud-example创建一个基本的 Spring Boot CRUD 项目,我是试图理解一段特定的代码发生了什么。

我对 Java 中的接口的理解是,您不能调用非静态且未实现的接口的方法签名。但是在ArticleService.java中,创建了对 IArticleDAO 接口的引用,然后他使用该引用类型从该接口IArticleDAO.java中调用方法

为什么这行得通?该接口中没有这些方法的实现,所以我不明白他如何首先调用这些方法,其次他们会做任何事情或返回任何东西。

标签: javaspringspring-boot

解决方案


接口是一种定义方法签名的方式。然后可以将实现接口的对象分配给该接口的实例,并且您绝对可以调用它们,因为它们已实现。

因此,如果class A implements B您可以将 的实例分配给A变量BB b = new A()

在这种情况下,一个额外的抽象是使用的字段是@AutoWired. 这意味着 Spring Framework 将找到一个实现接口并设置字段的实例对象。


推荐阅读