一言蔽之: 从四大特性可以看出,面向对象的终极目的只有一个:可维护性。易扩展、易复用,降低复杂度等等都属于可维护性的实现方式。
封装
封装变化点是面向对象中一种很重要的思维方式。
- What
信息隐藏或数据访问保护。
- How
类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或数据。它需要编程语言提供权限访问控制语法来支持,例如Java中的private、protected、public关键字。
隐藏方法的具体实现,让使用者只关心功能,无需关心具体实现。
- How
抽象可以通过接口类或者抽象类来实现,但也并不需要特殊的语法机制来支持。
用于表示类之间的 is-a 关系。
- How
需要编程语言提供特殊语法机制。如Java的”extends”;C++的”:”等
将子类对象赋值给父类变量(或实现类对象赋值给接口变量)后,代码运行时,父变量执行的是子类对象的方法实现。
- How
需要编程语言提供特殊的语法机制。如:继承、接口类、duck-typing
- Why
- 作用:
- 提高代码的可扩展性和复用性;
- 是很多设计模式、设计原则、编程技巧的代码实现基础。比如策略模式、基于接口而非实现编程、依赖倒置原则、里式替换原则、利用多态去掉冗长的if-else语句等等。
- 注意:
- 只有普通的方法调用可以是多态的,对象中的实例变量是不具备多态性的。
- 作用:
例如,如果你直接访问一个属性,该访问会在编译时解析;
- 通过引用变量来访问其包含的实例变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量。