黑马程序员技术交流社区

标题: 标准输入流System.in返回的是InputStream,为什么它可以直接调用read方法 [打印本页]

作者: yyt199108    时间: 2015-12-19 21:37
标题: 标准输入流System.in返回的是InputStream,为什么它可以直接调用read方法
InputStream不是个抽象类吗,为什么它可以直接调用read方法,如果是多态,它又是那个实现类呢?
InputStream instream = System.in;
int len = instream.read()   
//不能理解这里怎么可以直接调用呢?System类源码中对in的定义: public final static InputStream in = null;
作者: boboyuwu    时间: 2015-12-19 23:24
对啊 看到In前面inputstream  吗    system.in 只是一个字段   你调用这个字段后返回是一个inputstream 流不过这个流打开的通道连接的是键盘
作者: boboyuwu    时间: 2015-12-19 23:25
只要前面有类型的带的肯定有返回值  它前面带inputstream返回的肯定是一个inputstream对象实例

作者: 214652440    时间: 2015-12-20 00:03
可以问问老师啊
作者: yyt199108    时间: 2015-12-20 01:19
boboyuwu 发表于 2015-12-19 23:25
只要前面有类型的带的肯定有返回值  它前面带inputstream返回的肯定是一个inputstream对象实例
...

可是InputStream不是一个抽象类吗?抽象类可以直接调方法吗
作者: boboyuwu    时间: 2015-12-20 11:53
yyt199108 发表于 2015-12-20 01:19
可是InputStream不是一个抽象类吗?抽象类可以直接调方法吗

大哥你没仔细看api吗,抽象类中可以有抽象方法也可以没有抽象方法,你看下inputstream中的方法read()不是抽象方法啊,这个要仔细观察
作者: boboyuwu    时间: 2015-12-20 19:19
boboyuwu 发表于 2015-12-20 11:53
大哥你没仔细看api吗,抽象类中可以有抽象方法也可以没有抽象方法,你看下inputstream中的方法read()不 ...

我说错了了  你确定可以调用read()  read()是抽象方法啊
作者: 迷茫不堪的年纪    时间: 2015-12-20 23:23
....................InputStream 是IO的吧-  - 他的方法里有read读的, 建议你看下IO那里
作者: icm    时间: 2015-12-20 23:29
现在还是不能理解
作者: Hi.。    时间: 2015-12-21 02:53
icm 发表于 2015-12-20 23:29
现在还是不能理解

这个简单。这里是多态啊。
InputStream is = System.in;
编译看左边,运行看右边。InputStream中含有read()方法,所以编译不会报错。而运行时候,是运行的右边,即InputStream的子类。
还有一个简单的方法,直接System.out.println(System.in); 打印出来的,是一个java.io.BufferedInputStream@68d448a1;
即,System.in 表示的是一个BufferedInputStream对象。这样就好理解了
作者: yyt199108    时间: 2015-12-21 16:44
boboyuwu 发表于 2015-12-20 19:19
我说错了了  你确定可以调用read()  read()是抽象方法啊

可以调read()。现在懂了,System.in返回的是BufferedInputStream,所以可以直接调用read方法
作者: yyt199108    时间: 2015-12-21 19:06
Hi.。 发表于 2015-12-21 02:53
这个简单。这里是多态啊。
InputStream is = System.in;
编译看左边,运行看右边。InputStream中含有read ...

谢谢,明白了
作者: boboyuwu    时间: 2015-12-21 22:08
yyt199108 发表于 2015-12-21 16:44
可以调read()。现在懂了,System.in返回的是BufferedInputStream,所以可以直接调用read方法 ...

恩 这样就行
作者: 聚散不由我丶    时间: 2017-4-13 15:41
本帖最后由 聚散不由我丶 于 2017-4-13 15:49 编辑
bufferedinputstream
bufferedinputstream
bufferedinputstream
bufferedinputstream









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