Skip to content

面向对象编程思想 (OOP)

OOP(Object-Oriented Programming,面向对象编程)是一种编程范式,核心思想是将程序中的数据和操作数据的方法封装为 “对象”,通过对象之间的交互来实现功能。它更贴近人类对现实世界的认知(比如将 “汽车” 抽象为一个包含属性和行为的实体),相比面向过程编程(按步骤执行),更适合复杂系统的开发和维护。

面向对象的基础

类和对象是面向对象思想的基础,二者是 “模板”“实例” 的关系

类 (Class)

是对某一类事物的抽象描述,定义了这类事物共有的 “属性”(数据)和 “方法”(操作)。

例如 “手机类”,属性包括品牌、屏幕尺寸、内存,方法包括打电话、拍照、联网。

对象 (Object)

是类的具体实例,拥有类定义的属性和方法,且属性有具体的值。

例如 “我的 iPhone 15” 就是 “手机类” 的一个对象,其属性值为 “品牌 = 苹果,屏幕尺寸 = 6.1 英寸,内存 = 256GB”,能执行 “打电话给妈妈”“拍风景照” 等具体操作。

面向对象三大特性

封装、继承、多态这三大特性是面向对象思想的 “核心支柱”,解决了代码复用、扩展和灵活调用的问题。

封装 (Encapsulation)

  • 核心思想 :隐藏对象的内部细节(如属性值、复杂方法逻辑),只对外暴露 “可控制的接口”(即允许外部调用的方法)。
  • 作用
    • 保护数据安全,防止外部随意修改对象内部属性(例如禁止直接把手机 “内存” 改成负数)。
    • 降低耦合度,外部只需调用接口,无需关心内部实现(例如用手机拍照时,不用知道摄像头传感器的工作原理)。
  • 举例 :手机的 “充电口” 就是封装的接口,用户只需插充电器(调用接口),无需知道电池充电的电路逻辑(内部细节)。

继承 (Inheritance)

  • 核心思想 :让一个类(子类 / 派生类)能 “继承” 另一个类(父类 / 基类)的属性和方法,同时子类可新增自己的属性 / 方法,或重写父类的方法。
  • 作用
    • 减少代码重复,父类的通用逻辑只需写一次,子类直接复用。
    • 实现代码扩展,子类可在父类基础上新增功能,符合 “开闭原则”(对扩展开放,对修改关闭)。
  • 举例 :“智能手机类” 继承 “手机类”,可直接复用 “打电话”“发短信” 等父类方法,同时新增 “安装 APP”“连接 5G” 等子类特有的方法。

多态 (Polymorphism)

  • 核心思想:同一 “行为”(方法调用),在不同对象上会表现出不同的 “结果”。本质是 “子类对象可被当作父类对象使用,且调用方法时会执行子类的实现”。
  • 作用
    • 提高代码灵活性,调用方无需判断对象具体类型,只需统一调用父类接口。
    • 简化代码逻辑,新增子类时无需修改原有调用代码,符合 “里氏替换原则”。
  • 举例:父类是 “动物类”,有 “叫” 的方法;子类 “猫类” 重写 “叫” 为 “喵喵叫”,“狗类” 重写为 “汪汪叫”。当调用 “动物。叫 ()” 时,传入 “猫对象” 就输出 “喵喵”,传入 “狗对象” 就输出 “汪汪”。

面向对象的其他关键概念

抽象 (Abstraction)

  • 核心思想:忽略事物的非本质细节,只保留与目标相关的关键特征(即 “提取共性”)。
  • 与类的关系:类本身就是抽象的产物(例如 “手机类” 是对所有手机的抽象);更严格的抽象是 “抽象类”(用abstract修饰),它不能实例化,只能作为父类被继承,强制子类实现其未完成的 “抽象方法”。
  • 作用:聚焦核心功能,避免无关细节干扰,同时规范子类的实现(例如 “交通工具类” 定义抽象方法 “移动”,子类 “汽车”“飞机” 必须分别实现 “开”“飞” 的逻辑)。

接口 (Interface)

  • 核心思想:一种 “纯抽象” 的规范,只定义方法的 “签名”(方法名、参数、返回值),不包含任何方法实现或属性(部分语言如 Java 允许默认方法实现)。类通过 “实现(implements)” 接口,必须重写接口中的所有方法。
  • 与继承的区别
    • 继承是 “is-a” 关系(如 “智能手机是手机”),一个类只能继承一个父类。
    • 接口是 “has-a” 能力(如 “手机有联网能力”),一个类可实现多个接口(例如 “手机” 同时实现 “联网接口”“拍照接口”)。
  • 作用:解耦 “规范” 与 “实现”,让不同类可通过统一接口交互(例如 “充电接口”,不管是手机、平板还是耳机,只要实现该接口,都能用电充电器充电)。

小节

这些概念并非孤立,而是相互配合构建面向对象体系:

  • 类 / 对象是基础载体,封装了属性和方法。
  • 继承实现代码复用,多态基于继承实现灵活调用。
  • 抽象(抽象类)和接口是更高层次的规范,前者侧重 “类的继承约束”,后者侧重 “跨类的能力约束”。

尘埃虽微,积之成集;问题虽小,记之为鉴。 雾中低语,心之所向;思绪飘渺,皆可成章。