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

书中一例:importjava.io.File;importjava.io.OutputStream;importjava.io.FileOutputStream;pub... 书中一例:
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() ;
}
};
展开
 我来答
a2321411306
2012-03-11 · 超过17用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:15.1万
展开全部
可以这么写,也可以那么写。
这么写有好处,可以实现多态,此处如果不过文件输出,还可以用诸如控制台输出之类的其他输出方式,这时候多态的好处就得以显现出来了。
这也是公司编程的专用模式方法。
追问
是不是这个意思:
如果A是父类,有类B和C为A的子类,那么如果是用
A a=new B();
的话,过一阵还可以在把a对象改作
a=new C();
即可以实现从B通过向上转型到A再向下转到C?这就是目的所在?

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

代码写不下,放在补充问题里
追答
你说的意思对啊。就是这个意思,至于具体的实现方式很多。反正多态的作用就是这个。父类是动物,子类是猫,或者狗,所以父类可以有猫的作用或者狗的作用。具体的实现你去百度下其他例子,这个程序不太合适。
有时候只是习惯性地写成多态,并不是说他非要让其他子类实现,只是这么写的顺手了而已。
bd9006
2012-03-11 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
至于作者的原意,不好猜测。

不过看类名就叫作OutputStreamDemo01,所以,只是为了示范而作的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙2011
2012-03-11 · TA获得超过1851个赞
知道小有建树答主
回答量:1043
采纳率:100%
帮助的人:791万
展开全部
可以呀!用面向对象来理解就是左边是人类右边是具体到人了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
miniappocW2rtHm64yFN
2012-03-11
知道答主
回答量:34
采纳率:0%
帮助的人:18.5万
展开全部
基于动态绑定机制(多态 ) 使编程更灵活。仔细读读多态就明白了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式