没有主体的接口存根方法如何产生效果?

时间:2018-12-16 01:25:15

标签: java interface override implements

你好,所以我正在学习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应用程序时,即使该方法在我的类和接口中均为空,该方法也将初始化我的控件,并且在此方法完成执行之前,我无法在控件上工作,因为这是初始化我的控件的方法,但是当它没空的时候怎么办呢?

如果有人能向我解释这一点,我将不胜感激,因为这确实让我非常困惑

1 个答案:

答案 0 :(得分:1)

根据定义,当您实现一个接口时,您的类的实例将具有执行该接口指定的功能的能力。

AutoClosable具有close方法。无论您实际在方法实现中编写什么内容,都始终可以在close的实例上调用AutoClosable。但是实际上的作用取决于您的实现。

是的,用空的方法主体实现AutoClosable(或任何其他接口)的确有效果-即能够调用close,并能够在{{1 }}与资源声明。请注意,这只是调用方法的能力。这是否意味着您的对象实际上关闭了应该关闭的对象?不,因为这取决于您的实现。