黑马程序员技术交流社区

标题: 关于InputStream抽象类是否能够实例的疑问 [打印本页]

作者: 曹宇    时间: 2013-5-16 20:02
标题: 关于InputStream抽象类是否能够实例的疑问
本帖最后由 曹宇 于 2013-5-16 20:47 编辑

我看毕老师的这段代码:

InputStream in = System.in;        
int ch=0;  ch=in.read();  

有两个疑问,1 InputStream不是抽象类吗 怎么有实例 in   

2 read是抽象方法,为什么返回值就是你键盘输入的数据呢?
抽象方法不是要子类复写吗   
   这里调用这个抽象方法,是InputStream调用的 不是子类调用没复写 按理说这个read不就是空的吗 没内容。怎么可以实际用了呢?




作者: 张甲甲    时间: 2013-5-16 20:19
in对象是System类的一个静态变量 它是一个标准输入流 本身就是一个对象 。它继承与InputSteam
你所说的就是 java语言的精髓 父类对象指向子类
作者: SOAR    时间: 2013-5-16 20:27
1.InputStream确实是抽象的但是怎么就没有实例了呢。就像狗有很多种,某条藏獒或者其他的狗不就是它的实例吗。
2.in的定义是这样的:标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
3.System的源码中并没有提供read方法的实现,可能是in在调用read方法时是在调用InputStream其他子类的read方法。
作者: 曹宇    时间: 2013-5-16 20:47
恩,明白了,就跟多态了  InputStream本身不能有实例 但是可以有其引用指向子类实例。。。

而read();方法可能就是 标准输出流所内带的某种东西给实现的吧。。。。
作者: 曹睿翔    时间: 2013-5-16 21:26
曹宇 发表于 2013-5-16 20:47
恩,明白了,就跟多态了  InputStream本身不能有实例 但是可以有其引用指向子类实例。。。

而read();方法 ...

是这么回事,哈哈,多看看代码,用面向对象去研究




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