面向对象特征【封装性】

news2024/11/26 8:44:03

Java面向对象-封装性

文章目录

    • OOP
    • 封装性
      • 内聚(Cohesion)
      • 耦合(Coupling)
    • 封装性的优势
    • 最佳实践
    • 实际应用示例

OOP

面向对象编程(OOP)是计算机科学中的一个核心范例,它的其中一个重要特征是封装性。封装性有助于提高代码的可维护性、降低耦合度,并增加代码的安全性。在本篇文章中,我们将深入研究Java中封装性的概念,提供详细的代码示例,以帮助读者更好地理解这一关键特征。

封装性

封装性是OOP的四大特征(封装、继承、多态、抽象)之一,它强调将数据(属性)和操作(方法)打包成一个单一单元(类),并控制对数据的访问。通过将数据隐藏在类的内部,只能通过类的公共接口来访问,这有助于减少错误和提高代码的可维护性。

在Java中,我们使用访问修饰符来控制封装性。主要的修饰符包括:

  • public:公开的,可以在任何地方访问。
  • private:私有的,只能在类的内部访问。
  • protected:受保护的,可以在子类中访问。
  • 默认(无修饰符):包内可见。

系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握
好,面向对象的开发原则要遵循“高内聚低耦合”。

内聚(Cohesion)

内聚是指一个类或模块内部各个成员(方法、属性等)之间彼此相关联的程度。高内聚表示类的成员都与类的主要目标和功能紧密相关,低内聚表示成员之间关系较弱,功能各异。

高内聚通常是一个良好的编程原则,因为它有助于提高代码的可读性、可维护性和可理解性。类内高内聚的代码更容易维护,因为相关的功能都在一个地方,更容易修改和扩展。

举例:一个表示银行账户的类应该有高内聚,即包含与账户相关的操作如存款、取款、查询余额等,而不应该包含与其他不相关功能的操作。

耦合(Coupling)

耦合是指不同模块或类之间的依赖程度。高耦合表示模块之间高度依赖,一个模块的改变可能需要修改另一个模块,低耦合表示模块之间独立,一个模块的改变不会对其他模块产生太大影响。

低耦合是一个良好的设计目标,因为它有助于实现模块化和可维护的代码。低耦合的模块更容易重用,并且修改其中一个模块时,不会导致不必要的影响和错误。

举例:如果一个类 A 直接访问另一个类 B 的内部成员,它们之间存在高耦合。相反,如果类 A 通过接口或抽象类与类 B 进行通信,它们之间的耦合较低。

简单的Java类:

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 更多方法...
}

封装性的优势

  • 安全性:封装性有助于保护数据,防止外部代码直接访问或修改类的私有数据。
  • 可维护性:通过隐藏内部实现细节,封装性降低了外部代码对类的依赖,从而使类更易于维护和修改。
  • 模块化:封装性有助于将系统分解成更小的、可重用的模块,提高了代码的模块化和可扩展性。

最佳实践

  • 合理选择访问修饰符,只公开需要外部访问的部分。
  • 编写清晰的文档,描述类的公共接口和如何使用它。
  • 遵循命名约定,以提高代码的可读性。

实际应用示例

一个简单的银行账户类。这个类可以包含私有属性(账户余额、账户号码)以及公共方法(存款、取款),演示如何通过封装性实现安全和可维护的代码。

public class BankAccount {
    private double balance;
    private String accountNumber;

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }
    
    public double getBalance() {
        return balance;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“之江创客”跨境电商赛区决赛暨浙南新电商发展论坛圆满落幕

9月26日&#xff0c;由商务部中国国际电子商务中心指导&#xff0c;浙江省商务厅等十个部门主办&#xff0c;浙江省电子商务促进中心、温州市商务局、苍南县人民政府承办的“之江创客”2023全球电子商务创业创新大赛跨境电商赛区决赛暨浙南新电商发展论坛在苍南圆满落幕。浙江省…

快递查询方法分享:如何批量查询并筛选超时快递?

快递查询是我们在日常生活中经常需要进行的一项任务。然而&#xff0c;当我们需要同时查询多个快递单号的时候&#xff0c;手动一个一个输入单号进行查询无疑是一项十分耗时的工作。为了解决这个问题&#xff0c;今天给大家介绍一款名为“固乔快递查询助手”的神器。 固乔快递查…

gRPC之gRPC Gateway

1、gRPC Gateway etcd3 API全面升级为gRPC后&#xff0c;同时要提供REST API服务&#xff0c;维护两个版本的服务显然不太合理&#xff0c;所以 grpc-gateway 诞生了。通过protobuf的自定义option实现了一个网关&#xff0c;服务端同时开启gRPC和HTTP服务&#xff0c; HTTP服…

10月14日,每日信息差

今天是2023年10月14日&#xff0c;以下是为您准备的8条信息差 第一、中国石油摘得日本碳信用实货交易首单。据了解&#xff0c;日本交易所集团旗下的东京证券交易所11日宣布&#xff0c;交易二氧化碳排放量的“碳信用市场”正式开始运营 第二、前三季度全国铁路投产新线1402公…

解决git在window11操作很慢,占用很大cpu的问题

【git在window11操作很慢&#xff0c;占用很大cpu&#xff0c;最后也执行失败】 在谷歌输入&#xff1a;git very slow in window 11。通过下面链接终于找到了解决方案&#xff1a; https://www.reddit.com/r/vscode/comments/sulebx/slow_git_in_wsl_after_updating_to_window…

【算法优选】 前缀和专题——壹

文章目录 &#x1f60e;前言&#x1f384;[前缀和](https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId230&tqId2021480&ru/exam/oj&qru/ta/dynamic-programming/question-ranking&sourceUrl/exam/oj?page1&tab%25E7%25AE%2597%2…

Go语言入门心法(一)

Go语言入门心法(一) Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 一: go语言中变量认知 go语言中变量的定义: &#xff08;要想飞|先会走&#xff09;||&#xff08;翻身仗|抹遗憾 &#xff09; |&#xff08;二八定律&#xff09;(先量变)|(再质变)||&#x…

JVM基础:初识JVM

IDE&#xff1a;IntelliJ IDEA 2022.1.3 x64 操作系统&#xff1a;win10 x64 位 家庭版 文章目录 一、JVM是什么&#xff1f;二、JVM有哪些功能&#xff1f;2.1 解释和运行2.2 内存管理2.3 即时编译 三、有哪些常见的JVM&#xff1f;3.1 常见JVM3.2 Java虚拟机规范3.3 HotSpot的…

工业网关它的功能是什么

随着工业4.0的到来&#xff0c;工业网关在工业自动化领域中的作用越来越重要。工业网关是一种连接不同工业设备的网络设备&#xff0c;它能够实现不同设备之间的通信和数据传输。本文将以HiWoo Box为例&#xff0c;介绍工业网关的主要功能和应用场景。 一、工业网关的主要功能…

推荐几款简单易用的协作化项目管理工具

您是否正在寻找一种有效且简单的项目管理工具来帮助您与团队成员协作?项目管理工具在当今的商业世界中已经变得必不可少&#xff0c;因为它们帮助团队保持组织和生产力。找到合适的工具是困难的&#xff0c;因为有太多的选择。有些工具是为特定类型的项目设计的&#xff0c;而…

zabbix触发器与动作

一、触发器&#xff08;Trigger&#xff09; 1、概念&#xff1a; 在 Zabbix 中&#xff0c;触发器用于监测 Zabbix 监控系统中的各种指标和条件&#xff0c;并在特定条件满足时触发警报。&#xff08;触发器用于定义监控项的报警阈值&#xff09; 2、触发器对象&#xff1a…

CCF CSP认证 历年题目自练Day31

题目一 试题编号&#xff1a; 202206-1 试题名称&#xff1a; 归一化处理 时间限制&#xff1a; 500ms 内存限制&#xff1a; 512.0MB 题目背景 在机器学习中&#xff0c;对数据进行归一化处理是一种常用的技术。 将数据从各种各样分布调整为平均值为 0、方差为 1的标准分布&a…

Windows服务器监控工具

随着Windows服务器成为大多数网络不可或缺的一部分&#xff0c;一些关键业务功能永远依赖于它们的正常运行时间。其可用性和性能受到打击可能会对这些功能产生不利影响&#xff0c;进而极大地影响收入。 由于这些情况&#xff0c;通过主动衡量其性能并使用有效的Windows服务器…

html进阶语法

html进阶 列表、表格、表单 目标&#xff1a;掌握嵌套关系标签的写法&#xff0c;使用列表标签布局网页 01-列表 作用&#xff1a;布局内容排列整齐的区域。 列表分类&#xff1a;无序列表、有序列表、定义列表。 无序列表 作用&#xff1a;布局排列整齐的不需要规定顺序的…

21面向对象描述器

目录 1、什么是描述器&#xff1f; 1、原始的代码可以理解成为这样&#xff1a; 2、增加解释器可以改成如下&#xff0c;解释器就是集增删改查为一体的一个小的property 有一点需要注意的地方是&#xff1a;property里面内置的参数不是get_age()就是不用调用。 3、装饰器可…

【从零开始学习Redis | 第一篇】快速了解Redis

前言&#xff1a; 本篇对于Redis的讲解可以让我们简单的了解什么是Redis以及他的简单应用。主要还是因为我在学习苍穹外卖的时候&#xff0c;用到了这个知识点&#xff0c;而在平时的各种学习中&#xff0c;对于Redis的大名也是早有耳闻&#xff0c;因此今天来简单的介绍一下re…

基于动物迁徙优化的BP神经网络(分类应用) - 附代码

基于动物迁徙优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于动物迁徙优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.动物迁徙优化BP神经网络3.1 BP神经网络参数设置3.2 动物迁徙算法应用 4.测试结果…

推荐八个大学搜题软件和学习工具哪个好用且免费,一起对比看看

以下分享的软件提供了各种实用的功能&#xff0c;如数学公式计算、语文阅读辅助等&#xff0c;让大学生们在学习过程中更加高效和便利。 1.九超查题 这是一个老公众号了&#xff0c;我身边的很多朋友都在用&#xff0c;支持超新星、学习强国、知到、智慧树和各类专业网课题目…

PCB板的元素组成

PCB板是电子工艺一道重要的步骤&#xff0c;市面上几乎所有的电子产品的主板组成都是PCB板。 那正常一块PCB板上有哪些元素呢&#xff1f;正常一般会包括边框&#xff0c;过孔&#xff0c;通孔&#xff0c;铺铜等等。 焊盘&#xff1a; 就是用于焊接元器件&#xff0c;IC等引脚…

NSSCTF做题(9)

[GDOUCTF 2023]<ez_ze> 看见输入框而且有提示说是ssti注入 输入{{7*7}} 试试&#xff0c;发现报错 输入{%%}发现了是jinja2模板 找到关键函数 Python SSTI利用jinja过滤器进行Bypass ph0ebuss Blog 原理见这篇文章&#xff0c;这里直接给出payload {%set ninedict(aaa…