文章目录
一、里氏替换原则代码示例 ( 类的层级 | 反面示例 )
1、长方形
2、正方形
二、里氏替换原则代码示例 ( 类的层级 | 正面示例 )
1、四边形接口
2、长方形类
3、正方形类
三、里氏替换原则代码示例 ( 方法入参 | 正面示例 )
1、父类
2、子类
3、测试类
四、里氏替换原则代码示例 ( 方法入参 | 反面示例 )
1、父类
2、子类
3、测试类
五、里氏替换原则代码示例 ( 方法返回值 )
1、父类
2、子类
3、测试类
一、里氏替换原则代码示例 ( 类的层级 | 反面示例 )
在下面的类中 , 定义了长方形类 , 然后定义了长方形类的子类 , 正方形类 ;
其中在 正方形类中 , 重写了 长方形类的方法 ;
该操作明显违反了里氏替换原则 ;
根据里氏替换原则 , 子类只能实现抽象方法 , 不允许覆盖已有的非抽象方法 ;
1、长方形
package liskovsubstitution; /** * 长方形 */ public class Rectangle { /** * 长方形长 */ private long length; /** * 长方形宽 */ private long width; public long getLength() { return length; } public void setLength(long length) { this.length = length; } public long getWidth() { return width; } public void setWidth(long width) { this.width = width; } }
2、正方形
package liskovsubstitution; /** * 长方形 */ public class Rectangle { /** * 长方形长 */ private long length; /** * 长方形宽 */ private long width; public long getLength() { return length; } public void setLength(long length) { this.length = length; } public long getWidth() { return width; } public void setWidth(long width) { this.width = width; } }
二、里氏替换原则代码示例 ( 类的层级 | 正面示例 )
子类的行为 要和 父类 保持一致 , 如果无法达到这一点 , 就无法遵守里氏替换原则 ;
使用继承时 , 一定要慎重 ;
1、四边形接口
package liskovsubstitution; /** * 四边形 * 之前将 正方形 设置为 长方形 的子类不合理 * 这里抽象出一个四边形接口 * 令 长方形 和 正方形 都实现该 四边形接口 */ public interface Quadrangle { /** * 获取长度 * @return */ long getLength(); /** * 获取宽度 * @return */ long getWidth(); }
2、长方形类
package liskovsubstitution; /** * 长方形 */ public class Rectangle implements Quadrangle { /** * 长方形长 */ private long length; /** * 长方形宽 */ private long width; @Override public long getLength() { return this.length; } @Override public long getWidth() { return this.width; } public void setLength(long length) { this.length = length; } public void setWidth(long width) { this.width = width; } }