A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹宇 中级黑马   /  2013-5-16 20:02  /  1428 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹宇 于 2013-5-16 20:47 编辑

我看毕老师的这段代码:

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

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

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



评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

4 个回复

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

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

而read();方法 ...

是这么回事,哈哈,多看看代码,用面向对象去研究
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马