为什么FilterInputStream不是抽象类

时间:2014-01-15 10:41:46

标签: java abstract-class inputstream filter-input

我们无法实例化java.io.FilterInputStream,因为它没有公共构造函数,我们甚至不需要不扩展它。

他们为什么不把它作为抽象类?

3 个答案:

答案 0 :(得分:6)

技术上,Java中的protected包括相关类的子类,在同一个包中的其他类(不一定是子类)。因此,java.io中的另一个类可以直接实例化FilterInputStream。我能想到你为什么要这样做的唯一原因是FilterInputStream.read(byte[] b)委托给this.read(b, 0, b.length)而不是delegate.read(b),因此这是一种阻止委托read(byte[])方法的方法从被称为。但这就是我的所有猜测。

除了特定情况之外,正如您所指出的那样有效地抽象,但它没有任何抽象方法,因此编译器不会要求将该类声明为abstract。

答案 1 :(得分:0)

  

我们无法实例化java.io.FilterInputStream,因为它没有公共构造函数

我们不能。同一个包中的类可以。

答案 2 :(得分:0)

FilterInputStream没有公共构造函数(它受保护 - 您可以看到javadoc),因此您无法直接实例化它。我已经研究过DataInputStream是从FilterInputStream派生的(而DataInputStream确实有一个公共构造函数),所以可以实例化它。