InputStream类定义为 -
public abstract class InputStream extends Object
那么System类如何包含InputStream类的“in”对象?
答案 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
中列出的一些子类包括:
执行此代码以找出System.in实际的子类:
System.out.println(System.in.getClass());
得出这个答案:
class java.io.BufferedInputStream