A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Inspur 中级黑马   /  2013-9-17 21:02  /  1754 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-19 12:24 编辑

请高手指点
InputSream in = new FileInputStream(new File("demo.txt"));

InputSream in = new FileInputStream(demo.txt));
我查了下InputStream只有一个构造函数InputSream(),不明白怎么这么写的原理,请大家讲解一下

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

10 个回复

倒序浏览
你再看看FileInputStream这个类
InputSream in = new FileInputStream(new File("demo.txt"));
这句话用到了多态,父类引用指向子类对象。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
InputStream的作用是标志那些从不同起源地产生输入的类。这些起源地包括(每个都有一个相关的InputStream子类):
(1) 字节数组
(2) String对象
(3) 文件
(4) “管道”,它的工作原理与现实生活中的管道类似:将一些东西置入一端,它们在另一端出来。 (5) 一系列其他流,以便我们将其统一收集到单独一个流内。
(6) 其他起源地,如Internet连接等(将在本书后面的部分讲述)。
除此以外,FilterInputStream也属于InputStream的一种类型,用它可为“破坏器”类提供一个基础类,以便将属性或者有用的接口同输入流连接到一起。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
首先,FileInputStream是InputSream 的子类,
而InputSream 是一个抽象方法,不能为其new对象
还有楼主提问太简单,没有详细,不知道你那些不明白
回复 使用道具 举报
InputStream确实只有一个构造函数,但经过多态后,它新建的对象可以指向其子类(FileInputStream)的新建对象,而FileInputStream的构造方法就有三个,其中一个是FileInputStream(String name), 也有了:
(1)InputSream in = new FileInputStream(demo.txt));
而FileInputStream的另一个构造方法,FileInputStream(File file) 对应的就是你的第一个代码,而这个构造函数由于传递参数是一个类,所以根据File这个类的其中一个构造方法,File(String pathname) 再新建一个对象,所以就变为
(2)InputSream in = new FileInputStream(new File("demo.txt"));

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
多态,哥们
回复 使用道具 举报
InputStream是抽象类,不能直接用自身的构造方法来实例化,必须通过子类来实例化,只是对象的多态性,FileinputStream是Inpustream的子类,可用于实例化,它的构造方法有:FileInputStream(File file) ,FileInputStream(FileDescriptor fdObj) ,FileInputStream(String name)
回复 使用道具 举报
InputSream in = new FileInputStream(new File("demo.txt"));
这句话用到了多态,父类引用指向子类对象。
(new File("demo.txt"))
这句话是传递一个File类的对象。
把File 加载到的文件以对象的形式传递给FileInputStream
还有什么不懂的可以追问我。。。
回复 使用道具 举报
InputStream 是字节流的父类,它是一个抽象类,是不可被实例化的,FileInputStream是字节流的子类,这个很明显是父类引用指向子类对象,这是多态的体现
回复 使用道具 举报
父类的引用指向子类
回复 使用道具 举报
楼主,你好!
如果您的问题解决了,请把您问题的未解决更改为已解决
谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马