黑马程序员技术交流社区

标题: 为什么InputStream有构造函数呢?并且能接收? [打印本页]

作者: 林豪    时间: 2012-5-15 21:43
标题: 为什么InputStream有构造函数呢?并且能接收?
public abstract class InputStream,这是个抽象类,但是为什么有构造函数?
而且可以接收比如  Socket s =new Socket;   InputStream is=s.getInputStream求解释!!!
还有OutputStream也是!
作者: 刘克方    时间: 2012-5-15 21:46
本帖最后由 刘克方 于 2012-5-15 22:03 编辑

new InputStream() {
                             @Override
                        public int read() throws IOException {
                                // TODO Auto-generated method stub
                                return 0;
                        }
                };
通过上面的代码可以new出来InputStream对象,这里用到了匿名类的知识;
InputStream提供构造方法,通过复写其read()方法,以便我们根据需要定义自己的流。

InputStream is=s.getInputStream这里用到了多态的知识
父类引用指向子类对象。



作者: 林豪    时间: 2012-5-15 22:10
s.getInputStream返回类型也是InputStream,这不算多态吧?
作者: 刘_浩    时间: 2012-5-15 22:14
因为他还有子类呀,当子类初始化的时候,是  不是要读super();所以有构造函数咯。
作者: 刘克方    时间: 2012-5-15 22:32
林豪 发表于 2012-5-15 22:10
s.getInputStream返回类型也是InputStream,这不算多态吧?

它返回的InputStream对象指向的什么对象呢?!
我们定义一个自己的流对象,它有个方法返回的是InputStream对象;
class MyInputStream{
public InputStream getStream(){
return new FileInputStream();
}
}
InputStream in=new MyInputStream().getStream();
这同样是多态,上面和这是一样的道理。

作者: 林豪    时间: 2012-5-15 22:39
哦哦,原来是这样啊,受教了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2