解决方案 »

  1.   

    System.in是InputStream类型的啊,而且InputStream类有read方法啊,这有什么问题呢?
      

  2.   

    我终于理解你的意思了。你的意思是InputStream是一个抽象类,为什么能够直接调用read方法。这是java的多态,返回的类型是InputStream子类的对象,实际上System.in的真实类型是BufferedInputStream。
      

  3.   

    抽象类是不可以直接实例化,也就是不能使用 new 操作直接创建一个抽象类的对象。这是因为抽象类有抽象方法,如果创建了抽象类的对象,再调用抽象类定义的抽象方法,程序将无法执行,因为抽象方法没有实现。子类继承一个抽象类,并且实现了这个抽象类的方法之后,就可以通过创建子类对象的方式得到一个抽象类的实例。
    就象 InputStream 是个抽象类,它规定了 read 方法,从流中读一个字节的数据。但是流有很多种,常见的是文件流和网络中的数据流,不同的流读取数据的具体工作不一样,因此 read 方法只有在子类中才能确定如何工作。父类只能规定一个这样的方法。
    例如 InputStream = new FileInputStream("C:\\aa.txt");