你好,所以我正在学习Java,我有一个使我感到困惑的问题,当我们实现某些接口并覆盖它们的空方法时,即使我们在调用有效果的方法时未在覆盖中放置任何内容也是如此。
一些使我感到困惑的示例如下
实现AutoCloseable
接口并覆盖其close()方法,将使我们能够关闭对象
与Initializable
接口相同,如果对JavaFx应用程序覆盖它,则将初始化我们的控件,并且在两种情况下,我们都不会在覆盖中放置任何内容,但是该方法具有作用,我的意思是!!
在代码方面 这是AutoClosable界面
包java.lang;
public interface AutoCloseable {
void close() throws Exception;
}
当我实现它时,我会执行以下操作
@Override
public void close() throws Exception {
}
然后在另一个类中,我可以在尝试捕获时使用此close方法,并将其作为资源
try(SecurityController security = new SecurityController()) {
} catch (Exception ex) {
}
所以即使在接口或我的实现中没有单个代码,我仍然可以关闭对象
更多信息是Initializable接口的代码
public interface Initializable {
public void initialize(URL location, ResourceBundle resources);
}
当我实现它时,我将执行以下操作:
@Override
public void initialize(URL url, ResourceBundle rb) {
}
并且当我运行JavaFx应用程序时,即使该方法在我的类和接口中均为空,该方法也将初始化我的控件,并且在此方法完成执行之前,我无法在控件上工作,因为这是初始化我的控件的方法,但是当它没空的时候怎么办呢?
如果有人能向我解释这一点,我将不胜感激,因为这确实让我非常困惑
答案 0 :(得分:1)
根据定义,当您实现一个接口时,您的类的实例将具有执行该接口指定的功能的能力。
AutoClosable
具有close
方法。无论您实际在方法实现中编写什么内容,都始终可以在close
的实例上调用AutoClosable
。但是实际上的作用取决于您的实现。
是的,用空的方法主体实现AutoClosable
(或任何其他接口)的确有效果-即能够调用close
,并能够在{{1 }}与资源声明。请注意,这只是调用方法的能力。这是否意味着您的对象实际上关闭了应该关闭的对象?不,因为这取决于您的实现。