黑马程序员技术交流社区

标题: IO实例化问题 [打印本页]

作者: 马姗姗    时间: 2014-1-14 16:32
标题: IO实例化问题
本帖最后由 马姗姗 于 2014-1-15 15:09 编辑

为什么System.in可以为InputStream实例化对象,System.out可以为OutputStream实例化对象,这个问题有点搞不明白,查了API文档,还是不明白System类和InputStream、OutputStream的关系!

作者: 强子    时间: 2014-1-14 16:47
额  这个有什么不明白的   in 是System类中的一个静态常量  其类型就是InputStream
而in的具体的流 是使用native方法JNI调用的底层的代码获取到的,看看源码就知道了
作者: 未来希望    时间: 2014-1-14 16:55
System.out是一个PrintStream的对象,而PrintStream是OutputStream的子类,因此out也就为OutputStream的实例化对象
作者: 大大老伴要跪IT    时间: 2014-1-14 18:17
这个挺好明白的。首先我们来看public static final InputStream in
静态的直接用类名调用in,即System.in,这个没错吧
再看返回值类型是InputStream没错吧,所以有InputStream is = System.in;
再看public static final PrintStream out
同理有PrintStream ps = System.out;没错吧,
又因为PrintStream 是OutputStream的子类
所以有OutputStream os = System.out;这里是多态的体现。
作者: 小悠久    时间: 2014-1-14 18:40
OutputStream是一个抽象类,而System.out是一个PrintStream的对象。
out为System的一个final属性,在jvm启动的时候会自动执行,创建一个PrintStream对象并赋值给System的out属性。由于PrintStream是OutputStream的子类,因此out也就为OutputStream的实例化对象。这个是面向对象的一个特点。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2