Skip to content

面向对象编程的三大基本特性

面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起。 其三大基本特性——封装、继承和多态,共同构成了面向对象编程的核心思想。

封装

封装是面向对象的核心思想,指将对象的属性(数据)和行为(方法)结合在一起,形成一个独立的实体——类。 同时,通过信息隐藏的手段,将对象内部的实现细节对外界隐藏起来,只提供有限的公共接口供外部访问。

核心思想: * 数据隐藏: 将类的内部数据(属性)标记为私有(private),防止外部程序直接访问和修改,从而保证了数据的安全性和完整性。 * 接口暴露: 只对外提供公开(public)的方法作为访问内部数据的唯一途径,开发者可以控制外界如何与对象交互。 * 降低复杂度: 封装使得每个对象都像一个“黑箱”,使用者无需关心其内部复杂的实现细节,只需通过简单的接口调用即可完成操作,从而降低了编程的复杂度。

生活中的例子: 就像我们使用遥控器操作电视机一样,我们只需要按下遥控器上的按钮(调用公开接口),就可以切换频道或者调节音量,而不需要了解电视机内部复杂的电路是如何工作的(隐藏的实现细节)。

继承

继承是一种创建新类的方式,它允许一个类(子类或派生类)获取另一个类(父类、超类或基类)的属性和方法。 子类在继承父类的基础上,还可以添加自己独有的属性和方法,或者重写父类的方法以实现不同的功能。

核心思想: * 代码复用: 继承是实现代码复用的重要手段。通过继承,子类可以自动拥有父类的功能,无需重复编写相同的代码,从而提高了开发效率。 * 建立层次关系: 继承能够清晰地表达类与类之间的“is-a”(是一个)关系,形成一个层次化的结构,使得程序的设计更加符合现实世界的认知。例如,“狗”是一个“动物”,“猫”也是一个“动物”,它们都可以继承自“动物”类。 * 可扩展性: 在不修改原有类的基础上,通过继承可以方便地对类的功能进行扩展,增加了代码的灵活性和可维护性。

继承的种类: * 实现继承: 子类直接使用父类的属性和方法。 * 接口继承: 子类只继承父类方法的名称,但必须自己提供具体的实现。

在现代面向对象设计中,为了避免继承带来的复杂性,有时会提倡使用“组合”来代替继承,以提高代码的灵活性和可维护性。

多态

多态的字面意思是“多种形态”。在面向对象编程中,多态允许不同类的对象对同一消息做出不同的响应。 这意味着,同一个方法调用作用于不同的对象上,可能会产生不同的行为。 多态性是建立在封装和继承之上的。

核心思想: * 一个接口,多种实现: 多态的核心在于定义一个统一的接口,让不同的类去实现这个接口。当调用这个接口时,会根据对象的实际类型来执行相应的实现。 * 动态绑定: 程序在运行时才确定调用哪个对象的哪个方法,而不是在编译时就确定。这使得程序具有更高的灵活性和可扩展性。 * 代码的通用性: 通过多态,可以编写更加通用的代码。例如,一个函数可以接受一个父类类型的参数,但实际传入的可以是任何一个子类的对象,函数会根据传入对象的不同而执行不同的操作。

实现多态的必要条件: * 必须存在继承关系。 * 子类必须重写(override)父类的方法。 * 通过父类的引用指向子类的对象。

生活中的例子: 比如“绘图”这个操作,对于一个“圆形”对象,执行“绘图”会画出一个圆形;而对于一个“正方形”对象,执行“绘图”则会画出一个正方形。 “绘图”这个行为具有多种不同的表现形式,这就是多态的体现。