FileOutputStream?不是抽象类吧?

解决方案 »

  1.   

    FileOUtputstream 不是抽象类,但outputStream是
    这种用法就是Thinking in Java 中的 类型上转 UpCasting。
      

  2.   

    OutputStream是FileOutputStream的父类,这样赋值当然可以。
    Object o = new Integer(1);这样子可以理解吧。
      

  3.   

    同样的疑问,  bw78619(Genghis Khan) : 是不是抽象类不能被new对吗?
      

  4.   

    FileOutputStream可不是抽象类啊,而是OutputStream的实现类,所以可以new出实例来指派给OutputStream,当然,到运行时期,jvm会自动找到你所用的这个到底是FileOutputStream还是ByteOutputStream,这个就是java的迷人之处,你可以用动物这个接口来接受猫,狗,猪等等的实例,而到运行期jvm就能知道你到底这个地方要的是狗或者猫,还是猪,这个就是神奇的多态,但多态是怎么实现的,我也不知道,想知道,就去研究研究jvm吧
      

  5.   

    这只是一个简单的向上转型,依据是所有子类都有父类的类型,这是虚类的一种用法,的确多态也涉及到虚类,但是楼主的问题还没有牵涉到多态,我楼上的好像很会卖,难道CSDN的五星就是这样的,我想只是个别现象吧
      

  6.   

    这就是多态,是面向对象的范畴,任何面向对象语言都是这样OutputStream output=new FileOutputStream("text.txt");FileOutputStream是OutputStream的子类,所以output既是FileOutputStream的实例
    也是父类OutputStream的实例。FileOutputStream是非抽象类,是可实例化最简单的理解就是抽象类不能在类名前用new 操作符调用它的构造函数进行实例化。
      

  7.   

    我还是不太明白,那OutputStream明明是一个抽象类,怎么能创建一个引用output呢
      

  8.   

    kypfos(社会主义好) 
    我明白了,就是只要不是new 操作符调用它的构造函数进行实例化,就是可以的,看来我还要多看一下转型这方面的知识
      

  9.   

    OutputStream的实体output引用到的是FileInputStream.class的实例,也就是说实例化的是FileInputStream,只不过使用output引用。
      

  10.   

    帅哥,因为 FileOutputStream 是 outputStream 的子类,所以 FileOutputStream 就是 outputStream,不会有人说我不是人吧~~~
      

  11.   

    多态多态,说引用也是不准确的output IS-A FileOutputStreamalso IS-A OutputStream一种特化关系。
      

  12.   

    实际的类型是File,只是标个OutputStream的头衔罢了,所以还是可以实例化的。
      

  13.   

    举个现实生活中的例子; 
    有下面的继承关系
    class 动物
         |___class 狗
               |____class 黑狗
    如果有一条"黑狗",你当然也可以称它为一条"狗"了.
      

  14.   

    推荐使用这种方法,即尽量使用接口来定义一个类(抽象类在这种情况下也可被视为接口的一种)。
    例如
    Collection list = new ArrayList();
      

  15.   

    Dependency Inversion 的基础.
      

  16.   

    to mnwind(晨风)
    你那种写法也不是很好啊!最好是List list = new ArrayList();