Java 抽象类InputStream的实例
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 管道输出
public abstract class InputStream extends Object
那么系统类如何包含InputStream类的“in”对象呢?一个
InputStream
是抽象的,但是具体的类(实际上由System.in
引用的类)可以是InputStream的任何子类,包括一个
中列出的一些子类包括:
- 音频输入流
- ByteArrayInputStream
- 文件输入流
- 过滤流
- 输入流(CORBA)
- ObjectInputStream
- 管道输出流
- SequenceInputStream
- StringBufferInputStream
System.out.println(System.in.getClass());
答案是:
class java.io.BufferedInputStream
InputStream
是抽象类,但具体类(实际上由System.in
引用的类)可以是InputStream的任何子类,包括
中列出的一些子类包括:
- 音频输入流
- ByteArrayInputStream
- 文件输入流
- 过滤流
- 输入流(CORBA)
- ObjectInputStream
- 管道输出流
- SequenceInputStream
- StringBufferInputStream
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的一个版本更改到下一个版本,同时保持调用代码的愉快性。这是一个非常常见的问题…一个非常,非常常见的问题…我还要指出,
中的不是对象,而是引用。我还要指出,
中的不是对象,而是引用。