Socket s=new Socket();
outputstream os=s.getoutputstream();outputstream表示输出字节流的所有类的超类。
public OutputStream getOutputStream()throws IOException  返回的是输出流。也就是说返回了一个outputstream类的实例(我知道这么说是错的,因为抽象类无法实例化)。那声明的os是怎么指向这个对象的。我猜想这里有一个类继承了outputstream,实例化后返回,那这个类就很神秘了,因为连个名字都不知道。如果没有这个类,那你返回一个抽象类对象,不就错死了!!!
对象抽象类

解决方案 »

  1.   

    看看java基础吧。另外你如果希望知道os这个对象实际是一个什么类的实例,你可以用
    System.out.println(os.getClass());
      

  2.   

    同意楼上的
    System.out.println(os.getClass());
      

  3.   

    楼主多看看继承和多态吧
    总之一句话:父类变量可以引用子类对象
    Outputstream os是父类变量
    public OutputStream getOutputStream()throws IOException  返回的是输出流,并且这个输出流是OutputStream的子类对象(子类实例)
    所以Outputstream os = s.getoutputstream();就可以
    你要是换成FileOutputstream os = s.getoutputstream();就得报错了
      

  4.   

    返回一个【抽象对象】?何来抽象对象一说啊它只返回一个 实现了 OutputStream 子类对象 或者null并保证该实现的方法都实现了,该有的数据都有了;有实际的内存空间货真价实的对象;