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的类型吗?
------解决思路----------------------
我终于理解你的意思了。你的意思是InputStream是一个抽象类,为什么能够直接调用read方法。
这是java的多态,返回的类型是InputStream子类的对象,实际上System.in的真实类型是BufferedInputStream。
------解决思路----------------------
抽象类是不可以直接实例化,也就是不能使用 new 操作直接创建一个抽象类的对象。这是因为抽象类有抽象方法,如果创建了抽象类的对象,再调用抽象类定义的抽象方法,程序将无法执行,因为抽象方法没有实现。
子类继承一个抽象类,并且实现了这个抽象类的方法之后,就可以通过创建子类对象的方式得到一个抽象类的实例。
就象 InputStream 是个抽象类,它规定了 read 方法,从流中读一个字节的数据。但是流有很多种,常见的是文件流和网络中的数据流,不同的流读取数据的具体工作不一样,因此 read 方法只有在子类中才能确定如何工作。父类只能规定一个这样的方法。
例如 InputStream = new FileInputStream("C:\\aa.txt");