在写代码之前,首先我要谈一谈面向对象的三种特性,来引入后面的内容。
一 继承
继承是从已知类派生出新的类,是java面向对象最显著的一个特征。其优点是易于实现和扩展。 缺点是打破封装,向子类暴露了实现细节,父类更改之后子类也要同时更改,这样就增加了代码的耦合性。
需要注意的是 Java 不支持多继承,但支持多重继承。
二 封装
封装顾名思义就是(将数据隐藏而提供获得数据的接口)。它就像一道屏障可以起到保护数据的作用。其优点为:
1)减少代码的耦合性。
2)实现细节隐藏信息
3)对成员变量带到更精确的控制
4)类内部的结构可以自由修改
三 多态
多态是一个行为具有不同的表现形式和能力。
多态是同一个接口,使用不同的实例而执行不同操作。
多态存在的三个必要条件
- 继承
- 重写
父类引用指向子类对象。
多态的优点
- 简化代码
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 消除类型之间的耦合关系
有了这些基础可以让我们更好地理解代码
多的不说,直接上代码
装饰者类
```package com.chauncy.decorator;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
/**
* @author Administrator 装饰者模式 1)继承被装饰者类
*/
public class Decorator extends BufferedReader {
// 2)在装饰者类中,创建被装饰者类对象
private BufferedReader bReader;
// 3)传入被装饰者类对象给装饰者类
public Decorator(Reader in) {
super(in);
bReader = (BufferedReader) in;
}
// 加强
int count = 1;
@Override
public String readLine() throws IOException {
String content = bReader.readLine();
if (content != null) {
content = count + "chauncyluo: " + content;
count++;
}
return content;
}
}
<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
被装饰者类
package com.chauncy.decorator;
import java.io.BufferedReader;
import java.io.FileReader;
public class Demo {
public static void main(String[] args) throws Exception {
BufferedReader b = new BufferedReader(new FileReader("h:/1.txt"));
// 创建装饰者类
BufferedReader bReader = new Decorator(b);
String string = null;
while ((string = bReader.readLine()) != null) {
System.out.println(string);
}
bReader.close();
}
}