java中,书上用OutputStream out=new FileOutputStream(f),为何左边不直接写FileOutputStream out?

书中一例:
import java.io.File ;
import java.io.OutputStream ;
import java.io.FileOutputStream ;
public class OutputStreamDemo01{
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.OutputStream ;
import java.io.FileOutputStream ;
public class OutputStreamDemo01{
public static void main(String args[]) throws Exception{
File f= new File("d:" + File.separator + "test.txt") ;
//OutputStream out = null ;
//out = new FileOutputStream(f) ;
//换成:
FileOutputStream out = new FileOutputStream(f) ;
String str = "Hello World!!!" ;
byte b[] = str.getBytes() ;
out.write(b) ;
out.close() ;
}
};
两个程序都没问题,书上为什么要那么写?意义何在?这里为什么要使用对象的多态特性?不使用不是一样的么?
追问的代码在这里:

import java.io.File ;
import java.io.OutputStream ;
import java.io.FileOutputStream ;
//引入PrintStream类,和FileoutputStream一样都是OutputStream的子类
import java.io.PrintStream;
public class try01{
public static void main(String args[]) throws Exception{
File f= new File("g:" + File.separator + "test.txt") ;
OutputStream out = null ;
out = new FileOutputStream(f) ;
String str = "Hello World!!!" ;
byte b[] = str.getBytes() ;
out.write(b) ;

//添加一段代码A:
out = new PrintStream(new FileOutputStream(f));
String str2="你好";
out.printf("%s",str2);
//添加代码A结束

//添加一段代码B
out= System.out;
out.write("You are welcome!".getBytes());
//添加代码B结束

out.close() ;
}
};

可以这么写,也可以那么写。
这么写有好处,可以实现多态,此处如果不过文件输出,还可以用诸如控制台输出之类的其他输出方式,这时候多态的好处就得以显现出来了。
这也是公司编程的专用模式方法。追问

是不是这个意思:
如果A是父类,有类B和C为A的子类,那么如果是用
A a=new B();
的话,过一阵还可以在把a对象改作
a=new C();
即可以实现从B通过向上转型到A再向下转到C?这就是目的所在?

我又写了一段代码,因为PrintStream和FileoutputStream都是OutputStream类的子类,不过代码A没有编译通过,希望解释一下原因;后面还写了代码B,因为System.out常量也是继承自OutputStream类,可以编译通过

代码写不下,放在补充问题里

追答

你说的意思对啊。就是这个意思,至于具体的实现方式很多。反正多态的作用就是这个。父类是动物,子类是猫,或者狗,所以父类可以有猫的作用或者狗的作用。具体的实现你去百度下其他例子,这个程序不太合适。
有时候只是习惯性地写成多态,并不是说他非要让其他子类实现,只是这么写的顺手了而已。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-11
至于作者的原意,不好猜测。

不过看类名就叫作OutputStreamDemo01,所以,只是为了示范而作的。
第2个回答  2012-03-11
可以呀!用面向对象来理解就是左边是人类右边是具体到人了
第3个回答  2012-03-11
基于动态绑定机制(多态 ) 使编程更灵活。仔细读读多态就明白了。
相似回答