package dependenceInversionPrinciple; /** * 依赖倒转原则 * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月11日 上午9:52:36 */ public class DependenceInversionPrinciple { // 里氏替换原则 /* * 里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 * 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类, * 软件单位的功能不受到影响时,基类才能真正被复用, 而衍生类也能够在基类的基础上增加新的行为。 * * * 比方说java中的继承: 子类方法如果覆盖父类方法 子类方法的类修饰符必须要大于父类 但是子类方法抛出的异常必须要是父类方法抛出异常或者是其子类 */ /* * 依赖倒转原则: A:高层模块不应该依赖底层模块 两个都应该依赖抽象 B:抽象不应该依赖细节 细节应该依赖抽象 * * * 好吧 这里比较绕,说白了就是谁也不依靠谁 只依赖接口(按照接口的规定走) */ /** * 在这里举个例子 小时候都学过 企鹅 鸵鸟 都属于鸟类 如果用java来实现的话 看下边的实现 bird 是鸟类 其中有一个方法是fly * penguin 是企鹅类 它集成bird 所以他也有fly功能 但是企鹅本身是不会飞行的所以 它要覆盖fly方法 在方法的实现中写上 -》我不会飞 * 看似很正常 但是呢 这违反了里氏替换原则 为什么呢 企鹅不能代替bird了 因为它已经不会飞了 */ } /* * 鸟类 */ class bird { public void fly() { System.out.println("i can fly"); } } /* * 企鹅类 */ class penguin extends bird { public void fly() { System.out.println("i can't fly"); } }