面向对象四大特性
封装(Encapsulation)
封装也叫信息隐藏或者数据访问保护,也就是主要讲如何隐藏信息、保护数据。
实现方式
类通过暴露有限的访问接口,授权外部仅能通过类提供的方法来访问内部信息或数据。
需要编程语言提供权限访问控制语法来支持,比如Java中的private、protected、public关键字。
封装的意义:
- 保护数据不被随意修改,提高代码的可维护性。
- 仅暴露有限的必要接口,提高类的易用性。
抽象
抽象讲的是如何隐藏方法的具体实现,让调用者只需关心方法提供了哪些功能,并不需要知道这些功能是如何实现的。
抽象实现方式
抽象可以通过接口类(如Java的interface关键字语法)或者抽象类(Java中的abstract关键字语法)这两种语法机制来实现。
Java中abstract class表示的是"is a"关系,interface表示的是"like a"关系。
抽象存在的意义
- 修改实现不需要改变定义。
- 处理复杂系统的有效手段,能有效地过滤掉不必要关注的信息。
继承
继承用来表示类之间的is-a关系,分为两种模式:单继承和多继承。
单继承表示一个子类只能继承一个父类,多继承表示一个子类可以继承多个父类。
继承的实现方式
为了实现继承这个特性,编程语言需要提供特殊的语法机制来支持,如 Java 使用 extends 关键字来实现继承。
有些编程语言只支持单继承,不支持多重继承,比如 Java、PHP、C#、Ruby 等,而有些编程语言既支持单重继承,也支持多重继承,比如 C++、Python、Perl 等。
继承存在的意义
- 最大的一个好处是代码复用。这一点也并不是继承所独有的,我们也可以通过其他方式来解决这个代码复用的问题,比如利用组合关系而不是继承关系
- 人类认知的角度上来说,是一种 is-a 关系。我们通过继承来关联两个类,反应真实世界中的这种关系,非常符合人类的认知,而且,从设计的角度来说,也有一种结构美感。
过度使用继承,继承层次过深过复杂,就会导致代码可读性、可维护性变差。
多态
多态是指子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。
多态的实现方式
多态这种特性也需要编程语言提供特殊的语法机制来实现,比如继承、接口类、duck-typing。
只要两个类具有相同的方法,就可以实现多态,并不要求两个类之间有任何关系,这就是所谓的 duck-typing,是一些动态语言(如Python)所特有的语法机制。
而像 Java 这样的静态语言,通过继承实现多态特性,必须要求两个类之间有继承关系,通过接口实现多态特性,类必须实现对应的接口。
多态存在的意义
多态可以提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础。
附录
参考资料
资料扩展
除特别注明外,本站所有文章均为 windcoder 原创,转载请注明出处来自: mianxiangduixiangsidatexing

暂无数据