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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-9-3 21:16  /  1245 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
MyBufferedReaderZengQiang
*/
import java.io.*;
class MyBufferedReaderZengQiang extends Reader  //为什么要继承Reader?
{
private Reader r;   
MyBufferedReader(Reader r)
{
  this.r=r;
}
public String myReadLine() throws IOException
{
  //定义一个临时容器。原BufferReader封装的是字符数组
  //为了演示方便,定义一个StringBuilder,因为最终还是要将数据变成字符串
  StringBuilder sb=new StringBuilder();
  int ch=0;
  while((ch=r.read())!=-1)
  {
   if(ch=='\r')
    continue;
   if(ch=='\n')
    return sb.toString();
   else
    sb.append((char)ch);
  }
  return null;
}

/*
覆盖Reader中的抽象方法
*/
public int read(char[] cbuf,int off,int len)
{
  return.r.read(cbuf,off,in);
}
public void close()throws Exception
{
  r.close();
}

//自定义关闭方法
public void myClose()throws IOException
{
  r.close();
}
}

class MyBufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
  FileReader fr=new FileReader("buf.txt");
  MyBufferedReader mybufr=new MyBufferedReader(fr);
  String line=null;
  while((line=mybufr.myReadLine())!=null)
  {
   System.out.println(line);
  }
  mybufr.myClose();
}
}

为什么要继承Reader呢?自己定义的类里面的方法可以满足自己的使用要求了,而且继承了Reader还要复写里面的抽象方法,感觉没有增加类的功能,求解!

2 个回复

正序浏览
public void close()throws Exception
{
  r.close();
}
这个问题是这样的你自己想错了,你看你自己写的上边这个方法你调用的不还是reader里的方法。如果你没有继承reader这个类,那么r.close()这方法怎么实现。
所以说这个问题你反过来想你就明白了。
回复 使用道具 举报
因为你要覆盖Reader中的read抽象方法,所以需要继承。你也可以写一个装饰类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马