为什么InputStream方法不是抽象的?

时间:2014-07-08 18:18:20

标签: java methods inputstream

java.io文档说像close(),mark(),available()等其他的InputStream方法都不是抽象的。但是,根据Java文档,它们在默认实现中不执行任何操作。我的问题是:有理由吗?我的意思是,如果默认情况下这个方法什么也不做,显然如果我决定创建一个InputStream子类,我将不得不重写它们。因此,在我看来,将这些方法抽象化会更加正确,因为如果我们不这样做,我很容易忘记重写其中一种方法,它将无法正常工作。

2 个答案:

答案 0 :(得分:4)

不使它们变得抽象的目的恰恰是如果你不打算支持可选操作,那么必须放入空方法体。 “无所事事”与“有默认行为”不同,在InputStream的情况下,实际上没有任何内容(mark是无操作,因为标记并不总是支持)表示无法执行请求的操作的异常(reset)。 提供这些工具的任何流都将使用相同的行为,并且任何支持它们的流都必须覆盖特定的实现。

答案 1 :(得分:0)

在类中将方法标记为抽象可确保子类必须提供抽象方法的实现,否则子类应成为抽象类。因此,Inputstream类的子类没有必要提供该方法的实现。

相关问题