InputStreamReader isr = new InputStreamReader(System.in)这句话有多态存在,不好理解。各位大哥,还请开导开导。。

解决方案 »

  1.   

    我的理解是:
    InputStreamReader接受一个InputStream的参数,具体根据参数的具体类型从相应的地方读取数据。
      

  2.   

    我觉得是有重载吧?以下是InputStreamReader类的构造方法摘要:
    InputStreamReader(InputStream in) 
              创建一个使用默认字符集的 InputStreamReader。 
    InputStreamReader(InputStream in, Charset cs) 
              创建使用给定字符集的 InputStreamReader。 
    InputStreamReader(InputStream in, CharsetDecoder dec) 
              创建使用给定字符集解码器的 InputStreamReader。 
    InputStreamReader(InputStream in, String charsetName) 
              创建使用指定字符集的 InputStreamReader。 如果是多态的话就是说其继承自java.io.Reader
      

  3.   

    InputStreamReader(System.in)
    InputStreamReader(InputStream in)参数是InputStream类型的。System.in返回值是InputStream类型的。这里好像没什么父类,子类的。
      

  4.   

    在构造InputStreamReader时提供4种构造方式,分别如下:
    InputStreamReader(InputStream)
    InputStreamReader(InputStream, String)
    InputStreamReader(InputStream, Charset)
    InputStreamReader(InputStream, CharsetDecoder)
    其中红色标注的便是你目前所使用的方式。
    又因为System.in是System类中的一个静态的InputStream抽象类型的成员变量,大家都知道,接口和抽象类都是无法构造的。同时在类System的源码显示:in,err,及out成员一开始都为null值。但为了能够在程序中正常使用相关的该类成员,必须在该类加载进jvm时,通过调用某方法进行初始化工作(此方法为initializeSystemClass()),因为,此时的InputStream实例对象则是由jvm调用initializeSystemClass方法来构造的。
    基于此,便有了多态现象。
      

  5.   

    不知道你不明白的是哪一点。我碰到流也晕。
    InputStreamReader 和InputStream是两个类。
    System.in的类型是InputSteam,如果打印它,显示属于java.io.BufferedInputStream
    估计就像5楼说的一样,jvm完成了这个过程。
      

  6.   

    现在的问题应该就是System.in 和InputStrea的关系弄清楚,应该就搞清楚了。
      

  7.   

    这个可以查阅java api 中的InputStreamReader中的方法
      

  8.   

      java.io包下的InputStreamReader类的一个构造方法为:public InputStreamReader(InputStream in),要求参数为InputStream型。
      java.lang包下的System类的public static final InputStream in,是System类的一
    个常量,但返回类型为InputStream。System.in主要用于读取键盘输入。
      我知道的就这些,希望对你有帮助。