InputStream 抽象类的问题?

WJB08223 2014-09-27 10:34:07
public class J_Echo {
public static void mb_echo(InputStream in) {
try {
while (true) {
int i = in.read();////
char c = (char) i;
System.out.print(c);/////
}
} catch (IOException e) {
System.err.println(e);
}
System.out.println();
}

public static void main(String[] args) {
mb_echo(System.in);
}
}
本人刚学JAVA 不太理解这个为啥System.in.read()能使用 System.in返回的不是InputStream的类型吗?
...全文
286 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2014-09-29
  • 打赏
  • 举报
回复
抽象类是不可以直接实例化,也就是不能使用 new 操作直接创建一个抽象类的对象。这是因为抽象类有抽象方法,如果创建了抽象类的对象,再调用抽象类定义的抽象方法,程序将无法执行,因为抽象方法没有实现。 子类继承一个抽象类,并且实现了这个抽象类的方法之后,就可以通过创建子类对象的方式得到一个抽象类的实例。 就象 InputStream 是个抽象类,它规定了 read 方法,从流中读一个字节的数据。但是流有很多种,常见的是文件流和网络中的数据流,不同的流读取数据的具体工作不一样,因此 read 方法只有在子类中才能确定如何工作。父类只能规定一个这样的方法。 例如 InputStream = new FileInputStream("C:\\aa.txt");
WJB08223 2014-09-29
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
我终于理解你的意思了。你的意思是InputStream是一个抽象类,为什么能够直接调用read方法。 这是java的多态,返回的类型是InputStream子类的对象,实际上System.in的真实类型是BufferedInputStream。
谢谢 我的疑问就是这个
蜗牛_snail 2014-09-28
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
膜拜楼上...
rumlee 2014-09-28
  • 打赏
  • 举报
回复
我终于理解你的意思了。你的意思是InputStream是一个抽象类,为什么能够直接调用read方法。 这是java的多态,返回的类型是InputStream子类的对象,实际上System.in的真实类型是BufferedInputStream。
rumlee 2014-09-28
  • 打赏
  • 举报
回复
System.in是InputStream类型的啊,而且InputStream类有read方法啊,这有什么问题呢?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧