java - 接口类混淆
问题描述
在接口中,方法不包含实现。那么为什么ActionListener接口提供了Action的所有功能,而ActionListener方法中的方法却没有实现。那么它如何提供方法的功能。像 setOnClickListener 等。我很困惑。请帮助我
解决方案
接口定义了类应该提供的功能。例如,Runnable
接口有一个方法,run()
,任何实现的类都Runnable
应该有一个名为 的方法run()
。这同样适用于ActionListener
。
我对这个界面并不特别熟悉,但我将使用 JavaFX(一个 Java GUI 库)中的一个示例。
该类Button
有一个方法setOnAction(EventHandler<ActionEvent> handler)
,它设置按下该按钮时发生的操作。EventHandler<ActionEvent>
是一个接口,和 server 的目的类似ActionListener
。它有一种方法:void handle(ActionEvent event);
作为程序员,我的工作是提供一个实现 的类EventHandler<ActionEvent>
,以便按钮知道按下时要调用什么方法。我可以通过以下方式做到这一点:
- 在单独的 .java 文件中创建一个新类,实现接口并覆盖
handle()
- 创建一个匿名内部类,并覆盖那里的方法。
- 使用 lambda/方法引用 (Java 8),编译器将其视为匿名内部类
通过要求实现 的类EventHandler<ActionEvent>
,按钮知道将有一个handle(ActionEvent event)
方法可供调用。这就是界面所做的一切。这只是一个特定方法/方法将存在的承诺。如果您未能遵守此承诺(即您不重写该方法),编译器将失败并且您将无法运行您的代码。
推荐阅读
- excel - 尝试使用 MonthView 控件时的错误消息
- ruby-on-rails - 未定义的方法“protect_against_forgery?” 对于#<#
我正在努力解决,我认为这是一个简单的问题。我正在创建一个注册表单,您可以在其中创建帐户和用户(一个帐户可以有多个用户)。但是,在加载 new.html.erb 视图时,我收到以下错误:
undefined method `protect_against_forgery?' for #<#<Class:0x00>
- sql - 从非 Azure SQL 数据库恢复备份
- python - 为什么它打印两倍的“大”对角线(矩阵)
- xml - UPnP 和 SOAP 到路由器
- cygwin - Cygwin make 命令 - gcc 错误:没有这样的文件或目录
- java - 在屏幕中的不同 Fragment 之间共享一个 ViewModel 实例
- javascript - 当数组存储为全局变量时,增加数组的索引不起作用
- node.js - Async/Await:了解 Async/Await 的问题
- r - 有谁知道如何使用 ggplot 在图表上重新标记 x 和 y 轴和图例......还有一种方法可以将条形图堆叠在一起吗?