编码灵魂(1)-里氏替换原则

本文探讨了编码的灵魂,并重点解析了设计模式中的里氏替换原则(LSP)。介绍了LSP的四条准则,包括子类不能覆盖父类非抽象方法、可以增加特有方法等,并通过实例讨论了在实际编程中如何理解和运用这一原则,同时表达了作者对于过度遵循原则可能带来的限制的观点。
摘要由CSDN通过智能技术生成

引言

我觉得编码是有灵魂的,就像每个人都有信仰一样。那么如何去体现信仰,如何凸显灵魂就需要依赖它所固有的原则。最近学习了设计模式的六大原则,有所感悟,特此做总结和记录。在本文中详细介绍了里氏替换原则(LSP)的定义和理解,同时对它定义的规范进行了举例说明。笔者目前整理的一些blog针对面试都是超高频出现的。大家可以点击链接:http://blog.csdn.net/u012403290

技术点

1、前置条件(Pre-condition):
通俗来说就是方法的入参,比如说method(int a),那么这个int a就是前置条件。

2、后置条件(Post-Condition):
通俗来说就是方法的返回,比如说int methd(),那么这个int 就是后置条件。

3、里氏替换原则(LSP):
官方定义如下:

如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

其实是不太好理解的,通俗来说就是说判断某个继承是否符合LSP规则,需要保证它的子类没有改变父类本有的方法,子类可以拓展,但是不能改变父类原有功能。子类的能力要大于父类,即父类使用的方法子类都可以使用,任何子类的对象都可以当做父类使用。

我说一下自己的想法,首先原则肯定是要遵循的,但是如果过度的遵循里氏替换原则会导致的问题是当你继承一个类之后,完全不能重写父类的方法,这样对于多态性的体现有显得非常的拮据。所以我觉得子类重写父类代码之后,只要不破坏父类原本方法的思想,我觉得都不算是破坏里氏替换原则。为什么笔者会有如此感悟呢?下面例子中我会介绍。

里氏替换四条准则

1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
首先,如果是抽象方法,在子类继承的时候是强制要实现的,这是多态的一种体现,但是什么叫不能复写父类的抽象方法呢?比如下面的代码:

//父类
package com.brickworkers;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * @author Brickworker
 * Date:2017年4月5日下午2:07:40 
 * 关于类Base.java的描述:里氏替换原则父类
 * Copyright (c) 2017, brcikworker All Rights Reserved.
 */
public abstract class
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值