看java开发实战经典里面OutputStream里面的例子:
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Test{
public static void main(String args[]) throws Exception{//异常抛出,不处理
File f = new File("d:"+File.separator+"test.txt");
OutputStream out = null; //准备好一个输出流对象
out = new FileOutputStream(f); //通过对象多态性,进行实例化
String str="hello world";
byte b[]=str.getBytes();
out.write(b);
out.close();
}
}
我认为可以直接这样写:
import java.io.File;
import java.io.FileOutputStream;
public class Test{
public static void main(String args[]) throws Exception{
File f = new File("d:"+File.separator+"test.txt");
FileOutputStream out = new FileOutputStream(f);
String str="hello world";
byte b[]=str.getBytes();
out.write(b);
out.close();
}
}
这两个都可以实现目标,OutputStream是抽象类,FileOutputStream是OutputStream的子类,直接用FileOutputStream类声明对象不是更直接吗?
------解决方案--------------------
一样的作用 第一种只是使代码更灵活,父类的引用指向子类的对象,多态的表现。
------解决方案--------------------
抽象类是不能被实例化的,所以 OutputStream out = null; out = new FileOutputStream(f);这样得到的结果是引用是OutputStream,而实体是FileOutputStream,所以现在你只能用OutputStream抽象类的方法,如果用了FileOutputStream里面的方法而OutputStream里面没有的方法编译都通不过
------解决方案--------------------
当然是可以的 规范嘛 一般都会用多态的 当引用别的子类的时候,比如ObjectOutputStream 直接 out=ObjectOutputStream; 就行了
------解决方案--------------------