打字猴:1.70045367e+09
1700453670 b.doStuff(new HashMap());
1700453671
1700453672 }
1700453673
1700453674 此时,把Base全部替换为Sub,所有的行为全部还是由父类型Base实现的,子类型的doStuff方法并没有调用,也就是说,子类型可以在扩展前置条件的情况下保持类的可替换性。
1700453675
1700453676 (3)后置条件可以被缩小
1700453677
1700453678 父类型方法的返回值是类型T,子类同名方法(重载或覆写)的返回值为S,那么S可以是T的子集,这里又分为两种情况:
1700453679
1700453680 若是覆写,父类型和子类型的方法名名称就会相同,输入参数也相同(前置条件相同),只是返回值S是T类型的子集,子类型替换父类型完全没有问题。
1700453681
1700453682 若是重载,方法的输入参数类型或数量则不相同(前置条件不同),在使用子类型替换父类型的情况下,子类型的方法不会被调用到的,已经无关返回值类型了,此时子类依然具备可替换性。
1700453683
1700453684 增强类的可替换性,则增强了程序的健壮性,版本升级时也可以保持非常好的兼容性。即使增加子类,原有的子类还可以继续运行。在实际项目中,每个子类对应不同的业务含义,使用父类作为参数,传递不同的子类完成不同的业务逻辑,非常完美!
1700453685
1700453686
1700453687
1700453688
1700453689 编写高质量代码:改善Java程序的151个建议 [:1700438227]
1700453690 编写高质量代码:改善Java程序的151个建议 建议149:依赖抽象而不是实现
1700453691
1700453692 在面向过程开发中,我们考虑的是如何实现,依赖的是每个具体实现,而在OOP中,则需要依赖每个接口,而不能依赖具体的实现,比如我们要到北京出差,应该依赖交通工具,而不是依赖的具体飞机或火车,也就是说我们依赖的是交通工具的运输能力,而不是具体的一架飞机或某一列火车。这样的依赖可以让我们实现解耦,保持代码间的松耦合,提高代码的复用率,这也是依赖倒置原则(Dependence Inversion Principle,简称DIP)提出的要求。
1700453693
1700453694 依赖倒置原则的原始定义是:High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions。翻译过来,包含三层含义:
1700453695
1700453696 高层模块不应该依赖低层模块,两者都应该依赖其抽象。
1700453697
1700453698 抽象不应该依赖细节。
1700453699
1700453700 细节应该依赖抽象。
1700453701
1700453702 高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。那什么是抽象,什么又是细节呢?在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;而细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点是可以直接被实例化,也就是可以加上一个关键字new产生一个对象。依赖倒置原则在Java语言中的表现就是:
1700453703
1700453704 模块间的依赖是通过抽象发生的,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。
1700453705
1700453706 接口或抽象类不依赖于实现类。
1700453707
1700453708 实现类依赖接口或抽象类。
1700453709
1700453710 更加精简的定义就是“面向接口编程”,它的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独立,互不影响,从而实现模块间的松耦合。那我们怎么在项目中使用这个规则呢?只要遵循以下的几个规则就可以。
1700453711
1700453712 (1)尽量抽象
1700453713
1700453714 每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备。接口和抽象类都是属于抽象的,有了抽象才可能依赖倒置。
1700453715
1700453716 (2)表面类型必须是抽象的
1700453717
1700453718 比如定义集合,尽量使用如下这种类型:
1700453719
[ 上一页 ]  [ :1.70045367e+09 ]  [ 下一页 ]