行业资讯 2025年08月6日
0 收藏 0 点赞 847 浏览 1739 个字
摘要 :

文章目录 1. 封装简介 2. 无论发生什么变化,都要进行封装 3. 什么是抽象? 4. 封装和抽象的区别 封装和抽象是面向对象编程的四大特性中的两个。这两个原则都有助于设……




  • 1. 封装简介
  • 2. 无论发生什么变化,都要进行封装
  • 3. 什么是抽象?
  • 4. 封装和抽象的区别

封装和抽象是面向对象编程的四大特性中的两个。这两个原则都有助于设计一个类,以便该类可以执行必要的函数,并且不会向其他类暴露不需要的细节,以避免其被滥用。

在这篇文章中,我们将详细了解抽象和封装,并讨论两者之间的一些区别。

1. 封装简介

简单来说,将数据(状态)和方法(行为)封装在类内部,结合信息和实现隐藏(通过访问控制)的过程称为封装。

封装的结果是一个具有特征和行为的类。它可以与应用程序中的其他类交互,执行各种业务操作。

在以下示例中,ReportWriter类具有defaultLocation属性,可以通过公共的设置器和获取器方法访问该属性。通过将其设置为私有,防止直接设置该属性。

ReportWriter还提供了writeReport()方法,将在defaultLocation属性中设置的当前默认位置生成报告。这是封装的一个示例:

class ReportWriter {
  private String defaultLocation;
  public String getDefaultLocation() {
    return defaultLocation;
  }
  public void setDefaultLocation(String defaultLocation) {
    if(defaultLocation != null)
      this.defaultLocation = defaultLocation;
  }
  public void writeReport(String reportType) {
    //...
  }
}

2. 无论发生什么变化,都要进行封装

我在某处读到过这样的话:“无论发生什么变化,都要进行封装”。这被引用为一个著名的设计原则。事实上,在任何类中,数据在运行时可能会发生变化,而在未来的版本中可能会发生实现上的变化。因此,封装既适用于数据,也适用于实现。

访问控制或实现隐藏为数据类型或类之间建立了边界,有两个重要原因:

1. 确定其他类可以使用什么,不可以使用什么。
2. 将接口与实现分离。

在任何类中,如果我们能确保其他类除了通过公共方法发送消息之外什么都做不了,那么我们可以在将来修改类的非公共成员而无需担心,也不会破坏客户端代码。封装帮助我们实现这种确定性。

3. 什么是抽象?

抽象化是在系统中创建能够执行工作、报告和更改状态,并与系统中的其他对象进行通信的抽象角色的能力。抽象角色意味着我们知道如何与一个对象一起工作,但我们不知道它内部是如何工作的。它使用访问修饰符隐藏其实现细节。

为了与这样的抽象角色一起工作,我们只需要了解我们将使用的公共API。我们不需要关心它们如何执行工作。

例如,在前面的ReportWriter示例中,我们定义了writeReport()方法,客户端必须使用该方法来生成报告。客户端无需关心报告是如何生成的。

class ReportWriter {
  public void writeReport(String reportType) {
    //...
  }
}

4. 封装和抽象的区别

在学习抽象化的过程中,我们了解到抽象化本质上是一种思想,它有助于为类别抽象出行为。封装是我们实现所需抽象的机制。

简而言之,从OOP的角度来看,我们可以说:

  • 抽象更多的是关于类可以做什么。 [思想]
  • 封装更多的是关于“如何”实现该功能。[实施]

以大家熟知的HashMap类为例。HashMap类负责存储键值对,基于键进行搜索以及执行其他操作。

从外部来看,客户端代码只知道它的get()和put()方法。他们调用这些方法并愉快地使用。这实质上就是抽象化。抽象化表示客户端代码应该调用一个方法来添加键值对,调用一个方法来根据键检索值等等。如何实现这些并不关系客户端代码。

封装是在我们实现HashMap类并编写这些方法时发生的。我们编写HashMap.Entry类并创建一个类型为Entry[]的table变量。然后,我们将所有这些内容声明为私有,并只对put()和get()等方法提供公共访问。这实际上就是封装。

封装是对所期望的抽象的实现。

归属教程 Java基础教程

文章目录 前言  第1章 Java语言基础 第2章 流程控制语句 第3章 面向对象编程 第4章 Java 字符 […]

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9138.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号