抽象类InputStream的实例

时间:2012-02-06 15:30:29

标签: java input io

InputStream类定义为 -

 public abstract class InputStream extends Object 

那么System类如何包含InputStream类的“in”对象?

3 个答案:

答案 0 :(得分:2)

这是因为in不是一个对象,它是一个参考。

它是对InputStream的引用或InputStream的子类。作为它的摘要,它只能是一个子类。

答案 1 :(得分:2)

in类定义的System字段不需要引用InputStream的具体实现 - 正如您已经解决的那样,它不能 - 它只需要引用扩展InputStream的内容。

至少在Linux上,in引用一个自己包装FileInputStream的BufferedInputStream。其他实现可能会有所不同,这就是重点:使用像InputStream这样的抽象类允许实现类发生变化,并且可能会从一个版本的Java更改为另一个版本,同时保持调用代码的快乐。

答案 2 :(得分:1)

InputStream是摘要,但具体类(System.in实际引用的类)可以是InputStream的任何子类,包括anonymous class

javadoc for InputStream中列出的一些子类包括:

  • 的AudioInputStream
  • ByteArrayInputStream进行
  • 的FileInputStream
  • FilterInputStream中
  • InputStream(CORBA)
  • ObjectInputStream的
  • 的PipedInputStream
  • 的SequenceInputStream
  • 的StringBufferInputStream

执行此代码以找出System.in实际的子类:

System.out.println(System.in.getClass());

得出这个答案:

class java.io.BufferedInputStream