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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yjsf216 中级黑马   /  2015-3-7 13:25  /  1203 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yjsf216 于 2015-3-7 16:40 编辑
  1. class MyBufferedReader extends MyReader{
  2.         private MyReader r;
  3.         MyBufferedReader(MyReader r){
  4. }
  5. }
复制代码

MyBufferedReader是 MyReader装饰类,为什么还要继承 MyReader?
  1. class SuperPerson{
  2.       private Person p;
  3.       SuperPerson(Person p){
  4.       ........
  5.       }
  6. ......
  7. }
复制代码
就不需要继承Person呢?

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
为什么没有人回答呢{:3_62:}

点评

看不懂你要的是什么。  发表于 2015-3-7 16:20
回复 使用道具 举报
装饰类就是加强功能啊,肯定要在原有的类上,要么将对象传入,要么继承
回复 使用道具 举报
装饰类一般是将要装饰的类作为参数传递到构造函数中,然后提供更强大的功能
回复 使用道具 举报
本帖最后由 z47057554 于 2015-3-8 05:04 编辑

有点明白你的意思了,你这两个例子的区别就是继承,和类中使用了到了某个类个类型的区别
class MyBufferedReader extends MyReader{}
MyBufferedReader 可以在拥有MyReader中所有的方法基础上,另外增加新的功能,并增加增强的功能(这一部分就是装饰),所以才叫装饰类
而class SuperPerson{}
首先,如果SuperPerson{}拥有Person中的全部功能,那就需要继承,不继承的后果就是你要自己重新写完与Person完全
一样的功能,再加上自己的功能。
其次,SuperPerson跟Person没有关系,只是类中使用到了Person对象,那你那段代码的意义下面一样
SuperPerson{
String name;
SuperPerson(String name){//我能因为只是使用了一个String对象就继承String类吗;我要是同时使用好些类型,那不挂了吗

}
}
另外感觉你对流对象有点理不清关系,举个例子:
BufferedReader bffr=BufferedReader(new FileReader("xxx.txt"));
BufferedReader接受过FileReader()后,对"xxx.txt"进行操作的是BufferedReader的字符流对象(注意它还是个流对象,它
需要有对字符流进行操作的方法),而不在是FileReader的对象,如果BufferedReader
不继承Reader的话,那么它要操作文件,必有自己定义方法来实现操作功能。



评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 赞一个!

查看全部评分

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