我们无法实例化java.io.FilterInputStream,因为它没有公共构造函数,我们甚至不需要不扩展它。
他们为什么不把它作为抽象类?
答案 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确实有一个公共构造函数),所以可以实例化它。