System.in对象是inputStream类型。。import java.io.*;
class MM
{
    public static void main(String args[]) throws Exception
    {
              new MM().transform(System.in,System.out);    }
    public void transform(InputStream in,OutputStream out)
    {
        int c=0;
        try
        {
           while((c=in.read())!=-1)
           {
              int C=(int)Character.toUpperCase((char)c);
           }
         }
         catch(Exception e)
         {}
                 
    }
}
c=in.read()这个应该是抽象方法。。怎么可以直接用呢。。
而且System.in也没有这个方法的实现啊。。
这是怎么回事呢??

解决方案 »

  1.   

    能用的肯定有实现.
    你怎么知道System.in没有实现呢?
      

  2.   

    InputStream 只是 System.in 的类型描述,并不是说它就是直接 new InputStream 出来的。
    好比:List list = new ArrayList() 这种,表面上看是个 List 类型,实际上是个 ArrayList
    这就是面向接口进行编程,隐藏了具体的实现,只留下接口方法给使用者调用,而使用无需要去关
    心具体是如何实现的。System.in 由于涉及到与系统的控制台进行交互,因此它不能由纯 Java 实现,只能靠着
    native 形式来实现一个 InputStream 的。
      

  3.   

    up 
    System.in描述:
    public static final InputStream in“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。 其实他就是一个InputStream!System.out描述:public static final PrintStream out“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。 它是一个PrintSteam
      

  4.   

    这就意思说System.in有它的特殊性。。就是隐藏了实现的意思,对吗??
      

  5.   

    这应该跟"隐藏实现"没多大关系.隐藏实现一般是指对数据成员和一些私有方法的封装,使程序员不可见.
    这里主要是java是平台无关(对于开发程序员来说),所以System.in是一个接口,在不同的操作系统中有不同的impl类去实现这个接口.作为开发程序员,你只要调用这个接口就可以了,具体的实现交给本地化的实现类去做就可以了.