黑马程序员技术交流社区
标题:
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