首先,定义了一个抽象类 Reader_
,其中包含了两个方法,其中一个是抽象方法 readFile()
,另一个是非抽象方法 readString()
public abstract class Reader_ {
public void readFile() {}
public void readString() {}
},
然后,有一个子类 FileReader_
继承自 Reader_
,并实现了 readFile()
方法。
public class FileReader_ extends Reader_ {
@Override
public void readFile() {
System.out.println("读取文件中...");
}
}
接着,你有另一个子类 BufferedReader_
,它接收一个 Reader_
对象作为构造函数的参数。
public class BufferedReader_ extends Reader_ {
private Reader_ reader_;
public BufferedReader_(Reader_ reader_) {
this.reader_ = reader_;
}
}
然后在新建一个Test测试类,代码如下:
BufferedReader_ bufferedReader = new BufferedReader(new FileReader());
bufferedReader.readFile();
程序运行后,没有输出。
有两个原因:1.在BufferedReader_中,构造参数并没有直接关联到FileReader_类,所以无法调用到输出语句。
2.BufferedReader_继承Reader_类,但它没有覆盖readFile方法,因此当我用BufferedReader_对象调用时会调用Reader_类中的默认实现。
解决方法,在BufferedReader_中重写readFile方法:
public class BufferedReader_ extends Reader_ {
private Reader_ reader_;
public BufferedReader_(Reader_ reader_) {
this.reader_ = reader_;
}
// 重写 readFile 方法,委托给实际的 Reader_ 对象
@Override
public void readFile() {
reader_.readFile();
}
}
学了这么久,发现自己的基础是真的差呀!在以后的学习中,一定会更加巩固自己的基础!