场景
例题:设计文件管理系统,能够读取txt、doc和Excel等文件,采用子类继承父类方式
不使用里氏替换原则的解法:
代码实现:
//具体类
class ReadFile {
public void read(String fileName){
System.out.println("读取Excel文件"+fileName);
}
}
class ReadDoc extends ReadFile{
//子类覆写父类的方法
public void read(String fileName){
System.out.println("读取doc文件"+fileName);
}
}
class Demo{
public static void readFile(ReadFile a,String fileName){
a.read(fileName);
}
public static void main(String[] args){
readFile(new ReadFile(),"a.xsl");
readFile(new ReadDoc(),"a.xsl");
}
}
里氏替换原则的概念
所有引用基类的地方必须能透明地使用其子类的对象,即替换成子类之后,系统的行为不会发生改变
使用里氏替换原则的解法:
代码实现:
//父类是接口
public interface Readable{
void read(String fileName);
}
//子类实现了接口Readable
public class ReadDoc implements Readable{
@Override
public void read(String fileName){
System.out.println("读取doc文件"+fileName);
}
}
public class ReadXsl implements Readable{
@Override
public void read(String fileName){
System.out.println("读取xsl文件"+fileName);
}
}
//里式替换原则
public class Demo{
public static void readFile(Readable r,String fileName){
r.read(fileName);
}
public static void main(String[] args){
Readable r= new ReadDoc();
readFile(r,"a.doc");//读取doc文件
ReadXsl rs = new ReadXsl();
readFile(rs,"b.xsl");//子类透明替换父类(接口)
}
}
运行截图: