黑马程序员技术交流社区

标题: InputStream和OutputStream的构造方法<已解决> [打印本页]

作者: 吴扬    时间: 2012-6-2 22:57
标题: InputStream和OutputStream的构造方法<已解决>
本帖最后由 吴扬 于 2012-6-18 01:24 编辑

今天在学习的过程中,查看Java Api,发现InputStream和OutputStream这两个抽象类都有构造方法,一直不明白是为什么。而且在毕老师的视频中,在讲解读取键盘录入的时候有这样的语句:InputStream in = System.in;
为什么这两个抽象类会有构造方法呢?抽象类不是不能实例化对象的吗?
作者: 刘伯阳    时间: 2012-6-2 23:03
本帖最后由 刘伯阳 于 2012-6-2 23:06 编辑

你可能是搞混了,抽象类是可以有构造方法的,因为抽象类需要被继承。不能有构造方法的是接口。

作者: 黑马张扬    时间: 2012-6-2 23:06
抽象类可以有构造方法,一般是子类继承这个抽象类时用的
InputStream in = System.in
in是System的一个静态字段  in的类型的是InputStream
作者: 杜俊彪    时间: 2012-6-2 23:14
本帖最后由 杜俊彪 于 2012-6-2 23:58 编辑

楼上的都说的对 ,   当然 要有构造方法才能被继承;
因为in是System类的InputStream类型的静态属性(字段),所以可以直接拿来用而不用实例化对象 ;

至于你说的抽象类不能实例化,确实是这样;  但,  可以由子类来实例化吧,  这是多态所支持的;  如:InputStream in = new FileInputStream("Demo.txt") ;这是可以的;
作者: 何拴绪    时间: 2012-6-2 23:44
抽象类不能实例化但是可以有构造方法,原因是实体类继承抽象类后,在new一个实体类对象的时候,首先会找抽象类的构造方法,所以他是给子类使用的。
作者: 杨海波    时间: 2012-6-2 23:59

1,in是System类的InputStream类型的静态属性,所以可以直接拿来用而不用实例化对象。
2,java抽象类的构造方法和普通类的构造方法一样都是用来初始化类,只是抽象类的构造方法不能直接调用 因为抽象类不能实现实例
   但是一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数也可以使用其方法,但必须在子类里面重写




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