【无标题】韩顺平老师课堂上处理流设计模式碰到的疑问?

首先,定义了一个抽象类 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();
    }
}
学了这么久,发现自己的基础是真的差呀!在以后的学习中,一定会更加巩固自己的基础!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值