三大特性:
封装
- 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
- java里的class 把属性和方法都封装起来,用访问修饰符来控制访问级别。
继承
在一个现有类的基础上,增加新的方法或重写已有的方法,从而产生一个信新类。
带来的好处实现对原有类的一个复用。
多态
同一个行为具有不同表现形式
编译时多态:重载
运行时多态:通过动态绑定技术来实现,只有程序运行起来,你才知道调用的是哪个子类的方法。
运行时多态的条件:
1,继承,必须存在有继承关系的子类和父类
2,重写,子类对父类中某些方法进行重新定义,
3,向上转型,需要将父类类型的引用指向子类的对象,
只有这样改引用才能够具备技能调用父类的方法和子类的方法
- 重写是子类对父类的方法的实现进行重新编写,返回类型和参数列表都不能改变。
- 重载是在一个类里面,方法名字相同,而参数列表不同。
五大原则
单一职责原则(SRP)
-
是指一个类的功能要单一,
-
一个类应该仅有一个引起它变化的原因
-
职员类例子:
比如在职员类里,将工程师、销售人员、销售经理这些情况都放在职员类里考虑,其结果将会非常混乱,在这个假设下,职员类里的每个方法都要if else判断是哪种情况,从类结构上来说将会十分臃肿,并且上述三种的职员类型,不论哪一种发生需求变化,都会改变职员类!这个是大家所不愿意看到的! -
按照‘单一职责原则’,将普通员工、经理、老板分别建一个类。
开放封闭原则(OCP)
既开放又封闭,对扩展是开放的,对更改是封闭的!
- 扩展即扩展现行的模块,当我们软件的实际应用发生改变时,出现新的需求,就需要我们对模块进行扩展,使其能够满足新的需求!
- 更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件
- 这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!
里氏替换原则(DIP)
子类可以替换父类并且出现在父类能够出现的任何地方
- 这个原则也是在贯彻GOF倡导的面向接口编程!
在这个原则中父类应尽可能使用接口或者抽象类来实现! - 子类通过实现了父类接口,能够替父类的使用地方!
通过这个原则,我们客户端在使用父类接口的时候,通过子类实现!
意思就是说我们依赖父类接口,在客户端声明一个父类接口,通过其子类来实现
这个时候就要求子类必须能够替换父类所出现的任何地方,这样做的好处就是,在根据新要求扩展父类接口的新子类的时候而不影响当前客户端的使用!
依赖倒置原则(DIP)
- 传统的结构化编程中,最上层的模块通常都要依赖下面的子模块来实现,也
称为高层依赖低层! - 所以DIP原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块,所以称之为依赖倒置原则!
ISP 接口隔离原则
- 这个原则的意思是:使用多个专门的接口比使用单个接口要好的多!
这个我有体会,在我实际编程中,为了减少接口的定义,将许多类似的方法都放在一个接口中,最后发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!