日期:2014-05-20  浏览次数:20971 次

请教各位这两种写法
本帖最后由 zhiqiu 于 2013-08-14 10:29:28 编辑
看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里面没有的方法编译都通不过
------解决方案--------------------
引用:
Quote: 引用:

一样的作用  第一种只是使代码更灵活,父类的引用指向子类的对象,多态的表现。

后面的写法不是更简单吗?少了几行代码啊,而且我用的就是FileOutputStream类,直接就用它来声明并实例化,不是更容易理解吗?
 当然是可以的 规范嘛  一般都会用多态的 当引用别的子类的时候,比如ObjectOutputStream 直接 out=ObjectOutputStream; 就行了
------解决方案--------------------
引用:
Quote: 引用: