java - 使用接口引用调用非静态未实现的方法
问题描述
我正在按照这里的教程https://www.concretepage.com/spring-boot/spring-boot-security-rest-jpa-hibernate-mysql-crud-example创建一个基本的 Spring Boot CRUD 项目,我是试图理解一段特定的代码发生了什么。
我对 Java 中的接口的理解是,您不能调用非静态且未实现的接口的方法签名。但是在ArticleService.java中,创建了对 IArticleDAO 接口的引用,然后他使用该引用类型从该接口IArticleDAO.java中调用方法
为什么这行得通?该接口中没有这些方法的实现,所以我不明白他如何首先调用这些方法,其次他们会做任何事情或返回任何东西。
解决方案
接口是一种定义方法签名的方式。然后可以将实现接口的对象分配给该接口的实例,并且您绝对可以调用它们,因为它们已实现。
因此,如果class A implements B
您可以将 的实例分配给A
变量B
:B b = new A()
在这种情况下,一个额外的抽象是使用的字段是@AutoWired
. 这意味着 Spring Framework 将找到一个实现接口并设置字段的实例对象。
推荐阅读
- python - 从列表列表中删除停用词
- python - 如何使用nodejs验证密码?
- php - Laravel 将翻译文件的内容作为数组获取
- python - 为什么我的 plt.plot() 在绘制弹丸运动时不起作用?
- amazon-web-services - AWS - Cognito 联合身份
- python-3.x - Tensorboard(超级初学者) - 需要简单的历元损失图,InvalidArgumentError 上的错误:int64 的 attr 'T' 的值不在列表中
- c++ - 为什么析构函数调用比构造函数调用多
- gitlab - GitLab CI/CD - 同时使用包括:和需求:
- javascript - 比较 Chai 中的错误数组
- java - 如何更改“下”工具栏背景颜色?