面向对象三个特性和五大原则
三大特性
封装
- 定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。
- 途径:将数据与操作数据的源代码进行有机的结合,形成“类”。
- 原则:
- 把尽可能多的东西藏起来.对外提供简捷的接口。
- 把所有的属性藏起来。
继承
- 定义:就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。如果某类B继承某类A,就把这个B称为A的子类或派生类,而把类A称为B的父类也可以称为A是B的超类或基类。
- 特点:在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。也可以为子类追加新的方法。
- 好处:使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
- 注意:
- 在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
- implements 关键字可以变相的使Java具有多继承的特性,使用范围为类实现接口的情况,可以同时实现多个接口。
- final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。
- 同名方法调用:子类中通过this关键字调用子类中重写方法,通过super关键字调用父类中同名方法。如果父类的属性均为private修饰,则可以通过共有的getter、setter方法来调用。
多态
- 定义:指为不同数据类型的实体提供统一的接口。
- 多态存在的三个必要条件:
- 继承:子类继承父类。
- 重写:子类重写父类中方法。
- 父类引用指向子类对象:Parent p = new Child();
- 使用注意:当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
- 类型判断:使用 instanceof 方法。
- 好处:
- 消除类型之间的耦合关系。
- 提高了程序的拓展性。
五大原则
1.单一职责原则SRP
- 定义:一个类应该只有一个发生变化的原因。
- 好处:当需求变化时,只修改一个类,从而也就隔离了变化,可以减少类之间的耦合;如果一个类有多个不同职责,它们耦合在一起,当一个职责发生变化时,可能会影响到其他职责。
2.开放封闭原则OCP
核心思想:对扩展是开放的,而对修改是封闭的
对扩展开放:有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭:类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
3.里氏替换原则LSP
- 定义:所有引用基类的地方必须能透明地使用其子类的对象。
- 理解:只要有父类出现的地方,都可以用子类来替代。
- 约束条件:
- 子类必须实现父类的抽象方法,不得重写父类的非抽象(已实现)方法。
- 子类中可以增加自己特有的方法。
- 子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
4.依赖倒置原则DIP
- 含义:
- 高层次的模块不应该依赖低层次的模块,两者都应该依赖其抽象。
- 抽象不应该依赖于具体,具体应该依赖于抽象。
- 基本条件:
- 每个类尽量需要有抽象类或者接口
- 任何类都不应该从具体类派生
- 尽量不要复写抽象类的方法,类之间依赖的是抽象
5.接口分离原则ISP
- 定义:客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。
- 理解: 使用多个专门的接口比使用单一的总接口要好。