【JAVA】Java基础—面向对象编程:封装——封装的意义

在Java编程中,封装是面向对象编程(OOP)的四大基本特性之一(其他三个是继承、 polymorphism和抽象)。封装的核心思想是将对象的状态(属性)和行为(方法)包装在一起,并通过访问控制来保护对象的内部状态不被外部直接访问或修改。

一、封装概述

重要性
  1. 数据隐藏:封装可以隐藏对象的内部状态,只允许通过特定的方法访问和修改。这可以防止不当的操作对对象状态的影响。

  2. 提高安全性:通过控制访问权限,可以保护敏感数据,确保数据的完整性和安全性。

  3. 易于维护和修改:封装使得对象的内部实现可以独立于外部使用者进行修改,增强了代码的可维护性。

  4. 提供清晰的接口:封装通过公共方法(getter和setter)提供了一个清晰的接口,使得对象的使用更加直观。

生活中的类比

我们可以将封装比作一个汽车的控制系统。汽车的内部结构(引擎、变速器等)是封闭的,用户只能通过方向盘、油门和刹车等控制装置来与汽车进行交互。用户不需要了解汽车内部的复杂机制,只需使用提供的接口(控制装置)即可安全地驾驶汽车。

二、封装的实现

在Java中,封装通常通过以下方式实现:

  1. 使用访问修饰符:使用privateprotectedpublic等修饰符来控制属性和方法的可见性。

  2. 提供公共方法:通过公共的getter和setter方法来访问和修改私有属性。

1. 封装示例

我们将实现一个简单的Person类,演示如何使用封装来保护对象的属性。

public class Person {// 私有属性,外部无法直接访问private String name; // 姓名private int age;     // 年龄// 构造方法public Person(String name, int age) {this.name = name; // 初始化姓名setAge(age);      // 使用setter方法初始化年龄}// 公共方法:获取姓名public String getName() {return name; // 返回姓名}// 公共方法:获取年龄public int getAge() {return age; // 返回年龄}// 公共方法:设置年龄public void setAge(int age) {if (age >= 0 && age <= 150) { // 检查年龄的合理性this.age = age; // 合法年龄,设置} else {System.out.println("年龄不合法!"); // 不合法的年龄}}
}

代码解释

  • 私有属性nameage被声明为private,这意味着外部类无法直接访问这些属性。

  • 构造方法Person类的构造方法接受姓名和年龄,并使用setter方法来初始化年龄。

  • 公共方法
    • getName():返回姓名,允许外部获取私有属性。

    • getAge():返回年龄,允许外部获取私有属性。

    • setAge(int age):设置年龄,包含合理性检查,确保只有合法的年龄值才能被设置。

2. 使用Person类创建对象
public class Main {public static void main(String[] args) {// 创建Person对象Person person = new Person("Alice", 30);// 获取并输出姓名和年龄System.out.println("姓名: " + person.getName()); // 输出:姓名: AliceSystem.out.println("年龄: " + person.getAge());   // 输出:年龄: 30// 尝试设置合法年龄person.setAge(25);System.out.println("更新后的年龄: " + person.getAge()); // 输出:更新后的年龄: 25// 尝试设置不合法年龄person.setAge(-5); // 输出:年龄不合法!System.out.println("尝试设置不合法年龄后的年龄: " + person.getAge()); // 输出:尝试设置不合法年龄后的年龄: 25}
}

代码解释

  • 创建了一个Person对象,姓名为"Alice",年龄为30。

  • 使用getName()getAge()方法获取并输出姓名和年龄。

  • 使用setAge(25)方法设置合法的年龄,并输出更新后的年龄。

  • 尝试设置不合法的年龄(-5),会触发合理性检查,并输出错误信息。此时,年龄保持不变。

三、总结

封装是面向对象编程的一个重要特性,理解封装将帮助我们更好地设计和管理对象。Java中的封装概念,包括其意义、重要性和实现方式。

  1. 数据隐藏:封装通过私有属性保护对象的内部状态,防止外部直接访问。

  2. 安全性和合理性检查:通过公共方法(getter和setter)访问和修改私有属性,可以实现数据的安全性和合理性检查。

  3. 易于维护:封装使得对象的内部实现可以独立于外部使用者进行修改,增强了代码的可维护性。

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

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

相关文章

【常见问题解答】远程桌面无法复制粘贴的解决方法

提示:文中提出了“远程桌面无法复制粘贴文件到本地”问题的三种解决方法,其中“方法 3:重启 RDP 剪贴板监视程序”亲测有效。 目录 一、问题描述二、解决方法1.方法1:设置远程桌面连接(1)打开远程桌面连接,点击【显示选项】(2)勾选“剪贴板”,并点击【详细信息】(3)…

探索光耦:达林顿光耦的特点与应用

在现代电子设备中&#xff0c;光耦作为信号隔离和传输的核心元件之一&#xff0c;扮演着至关重要的角色。达林顿光耦凭借其独特的电流放大能力和可靠性&#xff0c;在众多应用中脱颖而出。本文将探讨达林顿光耦的特点及其广泛的应用。 达林顿光耦的主要特点 高电流放大倍数&a…

河南省的一级科技查新机构有哪些?

科技查新&#xff0c;简称查新&#xff0c;是指权威机构对查新项目的新颖性作出文献评价的情报咨询服务。这一服务在科研立项、成果鉴定、项目申报等方面发挥着至关重要的作用。河南省作为中国的重要科技和教育基地&#xff0c;拥有多个一级科技查新机构&#xff0c;为本省及全…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…

【故障解决】麒麟系统右下角网络图标取消显示叹号

原文链接&#xff1a;【故障解决】麒麟系统右下角网络图标取消显示叹号 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在麒麟系统中解决网络图标出现感叹号问题的文章。在日常使用麒麟系统的过程中&#xff0c;我们在内网或公网环境下&#xff0c;有时会遇…

Spring boot 集成 nacos、redis、mysql

1&#xff0c;准备好nacos环境&#xff0c;准备ncc.yml配置&#xff1a; 在配置添加 test: haha 2&#xff0c;添加依赖 在pom.xml 文件中添加Nacos 客户端的依赖&#xff0c;样例使用Spring Cloud Alibaba 版本使用2023.x 分支&#xff0c;详情可查看 版本发布说明-阿里云S…

力扣 LeetCode 206. 反转链表(Day2:链表)

解题思路&#xff1a; pre &#xff0c;cur双指针 需要通过tmp暂存cur的下一个位置&#xff0c;以方便cur的下一步移动 class Solution {public ListNode reverseList(ListNode head) {ListNode pre null;ListNode cur head;while (cur ! null) {ListNode tmp cur.next;c…

golang 实现比特币内核:公钥的 SEC 编码格式详解

比特币作为区块链的一个应用,它建立在分布式系统之上,‘节点’遍布全球。为了使所有节点协同工作并作为一个整体系统运行,需要保持所有节点同步在相同的状态中,也就是说节点之间需要频繁通信,并且相互交换大量数据消息。这要求在网络上传输的消息或数据要使用某种格式编码…

v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条

效果 导入组件 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; components:{ ElImageViewer },模板使用组件 <el-image-viewerv-if"isShowPics":on-close"closeViewer":url-list"srcList"/>定义两…

Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版(图形化安装)

Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版 ——图形化安装 一、安装前规划1.1 安装包下载1.2 环境信息 二、操作系统配置2.1 检查操作系统和内存2.2 关闭防火墙和selinux2.3 配置内核参数(/etc/sysctl.conf)2.4 配置资源使用参数(/etc/security/limits.conf)2.5 配置Remo…

【Linux】进程状态的优先级

大家好呀&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流哦 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各…

【Linux:IO多路复用(select函数)

什么是IO多路复用&#xff1f; 一种网络通信的手段&#xff0c;IO多路复用可以同时监测多个文件描述符&#xff0c;且这个过程是阻塞的&#xff0c;当检测有文件描述符就绪&#xff0c;程序的阻塞就会解除&#xff0c;就可以通过这些就绪的文件描述符进行通信。通过这种方式在…

软件工程笔记二—— 软件生存期模型

目录 瀑布模型 瀑布模型的特点 阶段间具有顺序性和依赖性。 推迟实现的观点 质量保证的观点 瀑布模型的优点 瀑布模型的缺点 快速原型模型 快速原型模型的优点 快速原型模型的缺点 增量模型 增量模型的优点 增量构件开发 螺旋模型 完整的螺旋模型&#xff08;顺…

视频孪生技术在金融银行网点场景中的应用价值

作为国民经济重要的基础行业&#xff0c;金融行业在高速发展的同时衍生出业务纠纷、安全防范、职能管理等诸多问题&#xff0c;对安全防范和监督管理提出了更高的要求。因此&#xff0c;如何能更好的利用视频监控系统价值&#xff0c;让管理人员更简便的浏览监控视频、更快速的…

【金融风控】特征评估与筛选详解

内容介绍 掌握单特征分析的衡量指标 知道 IV&#xff0c;PSI等指标含义 知道多特征筛选的常用方法 掌握Boruta,VIF,RFE,L1等特征筛选的使用方法 【理解】单特征分析 什么是好特征 从几个角度衡量&#xff1a;覆盖度&#xff0c;区分度&#xff0c;相关性&#xff0c;稳定…

LeetCode面试经典150题|228.汇总区间

给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…

new Object到底占用多少内存?

前言 通过 JOL 工具&#xff0c;深入剖析对象头、实例数据以及内存对齐的具体细节&#xff0c;了解 JVM 是如何管理和优化内存的。使用 JOL&#xff0c;验证内存结构&#xff0c;直观地观察 JVM 参数&#xff08;如对象指针压缩、类指针压缩等&#xff09;对对象布局的影响。 …

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

基于Java+SpringBoot宠物管理系统

一、作品包含 源码数据库设计文档全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&…

PYNQ 框架 - 中断(INTR)驱动

目录 1. 简介 2. 分析 2.1 Block Design 2.2 AXI Timer 2.2.1 IP 基本信息 2.2.2 IP 地址空间 2.2.3 级联模式 2.2.4 生成/捕获模式 2.3 AXI Interrupt 2.3.1 IP 基本信息 2.3.2 IP 地址空间 2.3.3 相关概念 2.3.4 参数配置 2.3.5 中断确认寄存器 3. PYNQ 代码 …