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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毛恩奇 中级黑马   /  2013-7-6 02:08  /  1100 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毛恩奇 于 2013-7-6 11:24 编辑
  1. import java.io.BufferedReader;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. class MyQuotBufferedReader extends BufferedReader{
  5. BufferedReader b;
  6. public MyQuotBufferedReader(BufferedReader b){
  7. super(b);
  8. this.b=b;
  9. }
  10. public String readLine() throws IOException{
  11. String line=super.readLine();????
  12. if(line==null){
  13. return null;
  14. }
  15. return "\""+line+"\"";//每一行加双引号
  16. }
  17. }
  18. class MyNumBufferedReader extends BufferedReader{
  19. int count=1;
  20. BufferedReader b;
  21. public MyNumBufferedReader(BufferedReader b){
  22. super(b);
  23. this.b=b;
  24. }
  25. public String readLine() throws IOException{
  26. String line=super.readLine();//用super无法打印出引号,只有数字????????????????????????
  27. if(line==null){
  28. return null;
  29. }
  30. return count+++line;//每一行前面标行号
  31. }
  32. }
  33. public class Demo5 {
  34. public static void main(String[] args) throws IOException {
  35. MyNumBufferedReader mqr=new MyNumBufferedReader(new MyQuotBufferedReader(new BufferedReader(new FileReader("d:\\111.txt"))));
  36. String line=null;
  37. while((line=mqr.readLine())!=null){
  38. System.out.println(line);
  39. }
  40. mqr.close();
  41. }
  42. }
复制代码
以上是装饰设计模式代码,为什么  MyNumBufferedReader继承BufferedReader后,复写的时候调用super.readLine()和b.readLine()效果不一样,用super的时候只有行号没有我要的引号,用b.readLine()时才有,用super和b调用有什么区别啊,构造函数那里this.b=b有点多余吧   直接调用父类的构造函数就行了啊!!!

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

4 个回复

倒序浏览
自定义的类里面都保存了BufferedRead类型引用了,不必在通过super调用父类中的readLine();可以直接用b.readLine()就行了。而且如果你是用super.readLine();最外层MyNumBufferedReader中调用的super.readLine()还是BufferedReader的,而不是MyQuotBufferedReader的readLine()方法;因为它继承的是BufferedReader,所以super调用的是BufferedReader的readLine();

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
学习学习!
回复 使用道具 举报
草貌路飞 发表于 2013-7-6 03:59
自定义的类里面都保存了BufferedRead类型引用了,不必在通过super调用父类中的readLine();可以直接用b.read ...

哦哦,明白了,我晕,学到后面前面最基础的都糊涂了,谢谢
回复 使用道具 举报
毛恩奇 发表于 2013-7-6 11:21
哦哦,明白了,我晕,学到后面前面最基础的都糊涂了,谢谢

不谢..我刚好在看前面的..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马