【发布时间】:2015-08-17 13:37:13
【问题描述】:
代码
import java.io.*;
class ioTest1{
public static void main(String args[]){
System.out.println(System.in.getClass());
}
}
返回 System.in 属于 BufferedInputStream 类。这是为什么呢?
由于System 类将System.in 定义为InputStream,我可以看到结果并非不可能。但是为什么前面的代码不能返回另一个继承自InputStream的类,比如DataInputStream?
【问题讨论】:
-
如果编写类的人决定选择另一个实现,它可能会返回扩展
InputStream类的其他内容。 -
BufferedInputStream是InputStream的子类。getClass()可以返回InputStream的任何子类,但它返回BufferedInputStream的原因是因为这就是它的实现方式——也就是说,在某个地方,你会找到一条大致说明的行System.in = new BufferedInputStream()(而不是其他类型的流)。您是在问开发者选择这种类型的流的原因吗? -
如果是代表开发人员实施的问题,那么这就回答了我的问题。但我试图了解 I/O 在 Java 中是如何工作的,我认为让这样一个指定的类实例化通用标准输入流很奇怪......
-
@ThemistoklisHaris 因为
InputStream是抽象的,所以它必须是子类之一。BufferedInputStream是一个非常合适且显而易见的选择。 -
@Kayaman 为什么
BufferedInputStream比InputStream的其他风格更好? (这将是这个问题的一个很好的答案;))
标签: java inheritance io