即对软件功能的扩展是开放的,对修改应该是关闭的。
即在进行功能的扩展时,不需要对原来的程序进行修改。
因为程序的逻辑是复杂的, 牵一发而动全身,修改一个地方,
往往可能导致另一个地方出现BUG。
就一个类而言,应该仅有一个引起它变化的原因。
即一个类的功能要单一,这样引起变化的原因才会只有一个。
但是有的时候,不得不修改,那么如果类的功能越单一,
修改起来也就越简单。
子类可以扩展父类的功能,但不能改变父类原有的
功能。
1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2.子类中可以增加自己特有的方法。
3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形
参)要比父类方法的输入参数更宽松。
4.当子类的方法实现父类的抽象方法时,方法的后置条件
(即方法的返 回值)要比父类更严格。
它的作用是应用在多态方面,但需要一个父类时,你拿任意一个
子类对象都是行得通的,如果按照该原则的话。比如java中的
容器类。
依赖于抽象实现,而不要依赖于具体实体。
因为抽象是不会变化的, 但是具体的实现是会变化的。
因为抽象是抽象出类要提供什么功能,而具体是实现是为了实现
该功能的算法。 那么很明显,抽象出的功能是很少变化的,
但是具体的实现却会变化, 所以依赖抽象来编程, 那么实现虽然
变化了,但是抽象类提供的接口没有变化, 那么就不会影响使用。
原文:http://www.cnblogs.com/beMaster/p/5024494.html