[英]How does an interface stub method with no body, can have an effect?
您好,所以我正在学习Java,我有一个让我感到困惑的问题,当我们实现某些接口并覆盖它们的空方法时,即使我们在调用有效果的方法时未在覆盖中放置任何内容,也是如此。
引起我困惑的一些具体示例如下,
实现AutoCloseable
接口并覆盖其close()方法,将使我们能够关闭对象,
如果对JavaFx应用程序重写它,则对于Initializable
接口也是如此,这将初始化我们的控件,并且在两种情况下,我们都不会在重写中放置任何内容,但是该方法具有作用,我的意思是!!
就代码而言,这是AutoClosable接口
包java.lang;
public interface AutoCloseable {
void close() throws Exception;
}
当我实现它时,我会执行以下操作
@Override
public void close() throws Exception {
}
然后在另一个类中,我可以在资源的try catch中使用此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应用程序时,即使该方法在我的类和接口中均为空,该方法也将初始化我的控件,并且在该方法执行完之前我无法在控件上工作,因为这是初始化控件的原因,但是如何它在空的时候不这样做吗?!
如果有人可以向我解释一下,我将不胜感激,因为这确实让我非常困惑
顾名思义,当您实现一个接口时,您的类的实例将具有执行该接口指定的功能的能力。
AutoClosable
具有close
方法。 无论您在方法实现中实际编写什么内容,都始终可以在AutoClosable
实例上调用close
。 但是它的实际作用取决于您的实现。
所以是的,用空的方法体实现AutoClosable
(或任何其他接口)确实会产生效果-即变得能够调用close
,并能够在try
with resources语句中使用它。 请注意,这只是一种调用方法的能力 。 这是否意味着您的对象实际上关闭了应该关闭的对象? 不,因为这取决于您的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.