5.依赖倒转原则

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");
	}
}

 

上一篇:接口与内部类


下一篇:[题解]CF386B Fly, freebies, fly!