Java 抽象类InputStream的实例

Java 抽象类InputStream的实例,java,input,io,Java,Input,Io,InputStream类定义为- public abstract class InputStream extends Object 那么系统类如何包含InputStream类的“in”对象呢?一个InputStream是抽象的,但是具体的类(实际上由System.in引用的类)可以是InputStream的任何子类,包括一个 中列出的一些子类包括: 音频输入流 ByteArrayInputStream 文件输入流 过滤流 输入流(CORBA) ObjectInputStream 管道输出

InputStream类定义为-

 public abstract class InputStream extends Object 

那么系统类如何包含InputStream类的“in”对象呢?

一个
InputStream
是抽象的,但是具体的类(实际上由
System.in
引用的类)可以是InputStream的任何子类,包括一个

中列出的一些子类包括:

  • 音频输入流
  • ByteArrayInputStream
  • 文件输入流
  • 过滤流
  • 输入流(CORBA)
  • ObjectInputStream
  • 管道输出流
  • SequenceInputStream
  • StringBufferInputStream
执行此代码以找出System.in实际为的子类:

System.out.println(System.in.getClass());
答案是:

class java.io.BufferedInputStream

InputStream
是抽象类,但具体类(实际上由
System.in
引用的类)可以是InputStream的任何子类,包括

中列出的一些子类包括:

  • 音频输入流
  • ByteArrayInputStream
  • 文件输入流
  • 过滤流
  • 输入流(CORBA)
  • ObjectInputStream
  • 管道输出流
  • SequenceInputStream
  • StringBufferInputStream
执行此代码以找出System.in实际为的子类:

System.out.println(System.in.getClass());
答案是:

class java.io.BufferedInputStream

这是因为中的
不是对象,而是引用


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

这是因为
中的
不是对象,而是引用


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

系统定义的
in
字段不需要引用
InputStream
的具体实现——正如您所计算的,它不能——它只需要引用扩展
InputStream
的内容


至少在Linux上,
中的
引用了一个BufferedInputStream,它本身包装了一个FileInputStream。其他实现可能会有所不同,这就是重点:使用像InputStream这样的抽象类可以使实现类有所不同,并可能从Java的一个版本更改到下一个版本,同时保持调用代码的愉快。

系统定义的
in
字段不需要引用具体的代码
InputStream
的实现——正如您所了解的,它不能——它只需要引用扩展
InputStream
的内容


至少在Linux上,
中的
引用了一个BufferedInputStream,它本身包装了一个FileInputStream。其他实现可能会有所不同,这就是重点:使用像InputStream这样的抽象类可以使实现类有所不同,并且可能会从Java的一个版本更改到下一个版本,同时保持调用代码的愉快性。

这是一个非常常见的问题…一个非常,非常常见的问题…我还要指出,
中的
不是对象,而是引用。我还要指出,
中的
不是对象,而是引用。