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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴扬 中级黑马   /  2012-6-2 22:57  /  2727 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴扬 于 2012-6-18 01:24 编辑

今天在学习的过程中,查看Java Api,发现InputStream和OutputStream这两个抽象类都有构造方法,一直不明白是为什么。而且在毕老师的视频中,在讲解读取键盘录入的时候有这样的语句:InputStream in = System.in;
为什么这两个抽象类会有构造方法呢?抽象类不是不能实例化对象的吗?

5 个回复

倒序浏览
本帖最后由 刘伯阳 于 2012-6-2 23:06 编辑

你可能是搞混了,抽象类是可以有构造方法的,因为抽象类需要被继承。不能有构造方法的是接口。
回复 使用道具 举报
抽象类可以有构造方法,一般是子类继承这个抽象类时用的
InputStream in = System.in
in是System的一个静态字段  in的类型的是InputStream

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杜俊彪 于 2012-6-2 23:58 编辑

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

至于你说的抽象类不能实例化,确实是这样;  但,  可以由子类来实例化吧,  这是多态所支持的;  如:InputStream in = new FileInputStream("Demo.txt") ;这是可以的;

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
抽象类不能实例化但是可以有构造方法,原因是实体类继承抽象类后,在new一个实体类对象的时候,首先会找抽象类的构造方法,所以他是给子类使用的。
回复 使用道具 举报

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

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马