Java面向对象
一、面向对象和面向过程的区别
- 面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
- 面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
二、面向对象三大特性
- **封装
**隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
- 继承
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承可以提高代码复用性。继承是多态的前提。
- 子类拥有父类非 private 的属性和方法。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- **多态
**父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
- 方法重载(overload)实现的是编译时的多态性(也称为前绑定)
- 方法重写(override)实现的是运行时的多态性(也称为后绑定)。
三、面向对象五大基本原则
- 单一职责原则 SRP(Single Responsibility Principle)
类的功能要单一
- 开放封闭原则 OCP(Open-Close Principle)
一个模块对于拓展是开放的,对于修改是封闭的
- 里式替换原则 LSP(the Liskov Substitution Principle)
子类可以替换父类做父类能做的事情。
- 依赖倒置原则 DIP(the Dependency Inversion Principle)
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
- 接口分离原则 ISP(the Interface Segregation Principle)
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。