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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李云贵 中级黑马   /  2014-7-23 09:25  /  622 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当想要对已有的类进行功能增强时,可以定义类,将已有的类对象传入,基于已有的功能来加强功能,那么自定义的该类称为装饰类
装饰类通常会通过构造方法接收被装饰的类的对象,并基于被装饰的对象的功能,提供更强的功能。

class Person{
void chifan(){
System.out.println("吃饭");
}
}
//这个类的出现是为了增强Person而出现的。
class NewPerson{
private Person p ;
NewPerson(Person p){
this.p = p;
}
public void chifan(){
System.out.println("开胃酒");
p.chifan();
System.out.println("甜点");
}
}
public static void main(String[] args) {

Person p = new Person();
NewPerson p1 = new NewPerson(p);
p1.chifan();
}
}

用我们前面的继承,也可以实现同样的功能。
class NewPerson2 extends Person{//继承
public void chifan(){
System.out.println("开胃酒");
super.chifan();
System.out.println("甜点");
}
}
继承增强功能会导致继承体系越来越臃肿。不够灵活。装饰比继承灵活。

自定义带行号的缓冲区LineNumberReader;

public class LineNumberReader extends MyBufferedReader {

public LineNumberReader(Reader r) {
super(r);
}
private int LineNumber;

public int getLineNumber() {
return LineNumber;
}

public void setLineNumber(int line) {
LineNumber = line;
}
public String myReadLine() throws IOException
{
LineNumber++;
return super.myReadLine();
}
}

获取行号:lnr.getLineNumber();
设置行号从几开始:lnr.setLineNumber(100);

LineNumberReader 步骤
1.创建一个字符写入流对象
FileReader fr=new FileReader ("a.txt");
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数
LineNumberReader lnfr=new LineNumberReader (fr);
3.读取流对象:该缓冲区提供了一个一次读取一行的方法。当返回null时表示,文件读到末尾
String line=null;
while((line=lnfr.readLine())!=null)
{
String s=line;
String linenum=lnfr.getLineNumber();
}
4.关闭
lnfr.close();



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马