是InputStream抽象类,可却有构造方法。那能创建对象吗?

soarsophy 2011-11-14 08:10:23
大家知道,InputStream是抽象类,而一般抽象类是不能创建对象的。但查一下,又会发现InputStream是有构造方法的。并且据一些书籍的介绍,System.in就属于InputStream的一个对象。这到底怎么回事呢?是抽象类也能创建对象,还是InputStream就不是抽象类呢?请教各位高手和专家。
...全文
291 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
junlong3636 2011-11-14
  • 打赏
  • 举报
回复
恩,我觉得是这样!!曾经也纠结过,后来理解可能就是这个问题[Quote=引用 3 楼 magong 的回复:]
①抽象类不能实例化对象。但是其具体子类可以。
②InputStream是抽象类。所以虽然InputStream有构建器,但是不能用于实例化对象,只能在子类实例化子类对象的时候为子类服务。
③System.in是BufferedInputStream子类的对象,当然也符合InputStream类型。
[/Quote]
沧海雪 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiakai0419 的回复:]

2楼正解。

1楼扯淡。

接着你的问题,我想到了一个更深层次的问题。

抽象类为什么不能 创建对象呢。

因为抽象类有abstract的方法。

所以不能创建对象。

但是,抽象类必须有构造方法。

为什么这么说呢?

抽象类,有一个用途,就是当做模板。让别的类来继承他(继承的时候实现他所有的abstract方法)

大家应该知道

子类的构造方法里第一……
[/Quote]

顶!!!
抽象类是不能创建对象的,但非抽象的子类可以。
小小X 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiakai0419 的回复:]

2楼正解。

1楼扯淡。

接着你的问题,我想到了一个更深层次的问题。

抽象类为什么不能 创建对象呢。

因为抽象类有abstract的方法。

所以不能创建对象。

但是,抽象类必须有构造方法。

为什么这么说呢?

抽象类,有一个用途,就是当做模板。让别的类来继承他(继承的时候实现他所有的abstract方法)

大家应该知道

子类的构造方法里第一……
[/Quote]
学习了
jiakai0419 2011-11-14
  • 打赏
  • 举报
回复
朋友,记住要结贴。
jiakai0419 2011-11-14
  • 打赏
  • 举报
回复
结合3楼的答案

你应该可以理解了。
jiakai0419 2011-11-14
  • 打赏
  • 举报
回复
2楼正解。

1楼扯淡。

接着你的问题,我想到了一个更深层次的问题。

抽象类为什么不能 创建对象呢。

因为抽象类有abstract的方法。

所以不能创建对象。

但是,抽象类必须有构造方法。

为什么这么说呢?

抽象类,有一个用途,就是当做模板。让别的类来继承他(继承的时候实现他所有的abstract方法)

大家应该知道

子类的构造方法里第一句会调用super()也就是父类的构造方法

用来初始化从父类继承来的字段。

这个时候相当于在子类内部创建了一个隐藏的父类对象。

但是,这看似与我们刚才说的,抽象类不能创建对象矛盾了。

但,如果你自习思考就会知道。其实不矛盾。

抽象类不能创建对象是因为有方法是abstract类型的。

而我用子类继承他的时候必然实现了他的abstract方法。

这样就没有方法是abstract的了。

所以也就相当于刚才的创建合法。


这就是抽象类中有构造方法,而且必须有构造方法的原因。
小小X 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yangjunloveyu 的回复:]

in是InputStream子类的一个对象,说它是InputStream的对象也可以的
抽象类不可以创建对象

InputStream是抽象类,
本人新手也不知道InputStream为什么会有构造方法
[/Quote]

抽象类也是可以定义 构造方法的
magong 2011-11-14
  • 打赏
  • 举报
回复
①抽象类不能实例化对象。但是其具体子类可以。
②InputStream是抽象类。所以虽然InputStream有构建器,但是不能用于实例化对象,只能在子类实例化子类对象的时候为子类服务。
③System.in是BufferedInputStream子类的对象,当然也符合InputStream类型。
小小X 2011-11-14
  • 打赏
  • 举报
回复
in是InputStream子类的一个对象,说它是InputStream的对象也可以的
抽象类不可以创建对象

InputStream是抽象类,
本人新手也不知道InputStream为什么会有构造方法
脉动 2011-11-14
  • 打赏
  • 举报
回复
个人理解:抽象类,不可以使用: new 类名(),进行创建对象的动作

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧