【JavaSE】面向对象之封装

封装的概念
封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。
什么是封装?
封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。
封装的特点
1.只能通过规定的方法访问数据。
2.隐藏类的实例细节,方便修改和实现。
实现封装的具体步骤如下:
1.修改属性的可见性来限制对属性的访问,一般设为 private
2.为每个属性创建一对赋值(setter)方法和取值(getter)方法,一般设为 public,用于属性的读写。
3.在赋值和取值方法中,加入属性控制语句(对属性值的合法性进行判断)。
下面以一个员工类的封装为例介绍封装过程。我们假设一个员工的主要属性有姓名、年龄、工资。假设员工类为 Employee,示例如下:

public class Employee {private String name; // 姓名private int age; // 年龄private double balance; // 工资//定义无参构造方法public Employee() {}//定义有参构造方法public Employee(String name, double balance, int age) {this.getBalance();this.getAge();this.getName();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {// 对年龄进行限制if (age > 18 && age < 45) {this.age = age;} else {System.out.println("年龄必须在18到45之间!");this. Age = 18; // 默认年龄}}public double getBalance() {return balance;}public void setBalance(double balance) {//工资必须大于1000if (balance>1000){this.balance = balance;}else {System.out.println("error");}}
}

如上述代码所示,使用 private 关键字修饰属性,这就意味着除了 Employee 类本身外,其他任何类都不可以访问这些属性。但是,可以通过这些属性的 setXxx() 方法来对其进行赋值,通过 getXxx() 方法来访问这些属性。
在 age 属性的 setAge() 方法中,首先对用户传递过来的参数 age 进行判断,如果 age 的值不在 18 到 45 之间,则将 Employee 类的 age 属性值设置为 18,否则为传递过来的参数值。
编写测试类 TestEmployee,在该类的 main() 方法中调用 Employee 属性的 setXxx() 方法对其相应的属性进行赋值,并调用 getXxx() 方法访问属性,代码如下:

public class TestEmployee {public static void main(String[] args) {Employee people = new Employee();people.setName("小张");people.setAge(20);people.setBalance(10000);//输出信息System.out.println("姓名:" + people.getName());System.out.println("年龄:" + people.getAge());System.out.println("工资:" + people.getBalance());}
}

封装的作用
① 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

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

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

相关文章

Java旋转数组中的最小数字(图文详解版)

目录 1.题目描述 2.题解 分析 具体实现 方法一&#xff08;遍历&#xff09;&#xff1a; 方法二&#xff08;排序&#xff09;&#xff1a; 方法三&#xff08;二分查找&#xff09;&#xff1a; 1.题目描述 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&a…

Linux基础

Linux 一、基础01- 执行环境准备02- linux的版本分类02.1 内核版本02.2 发行版本02.3 内核和发行版本的区别: 03- 虚拟机安装04- 启动linux 二、系统操作05- 帮助命令05.1 man 帮助05.2 help 帮助05.2.1 内部命令05.2.2 外部命令 05.3 info 帮助 06- ls命令06.1 -r06.2 -rt06.3…

npm install 中 --save 和 --save-dev 是什么?

npm&#xff0c;全名 Node Package Manager&#xff0c;套件管理工具&#xff0c;package.json 会记下你在项目中安装的所有套件。 假设在项目中安装 lodash npm i --save lodash这样在 dependencies 中会出现&#xff1a; 如果修改了导入方式&#xff1a; npm i --save-dev …

在Linux中对docker 一键安装,本地安装,无网络安装,

在Linux中对docker 一键安装 前提先准备好安装包 非常丝滑 首先先把需要准备的文件准备好&#xff0c;/package/base.tar 和 /package/docker-20.10.10.tgz包 这两个文件包必须放在 /package目录下 再和/package同级的目录下再准备conf目录&#xff0c;conf目录下放docker.se…

Labview解决“重置VI:xxx.vi”报错问题

文章目录 前言一、程序框图二、前面板三、问题描述四、解决办法 前言 在程序关闭前面板的时候小概率型出现了 重置VI&#xff1a;xxx.vi 这个报错&#xff0c;并且发现此时只能通过任务管理器杀掉 LabVIEW 进程才能退出&#xff0c;这里介绍一下解决方法。 一、程序框图 程序…

特征选择 | 递归特征消除算法筛选最优特征

特征选择 | 递归特征消除算法筛选最优特征 目录 特征选择 | 递归特征消除算法筛选最优特征写在前面常规方法算法原理结果分析参考资料 写在前面 在实际应用中&#xff0c;特征选择作为机器学习和数据挖掘领域的重要环节&#xff0c;对于提高模型性能和减少计算开销具有关键影响…

pve7.2虚拟机 lvm磁盘扩容,增加硬盘操作

之前安装pve时候只有256的ssd,最近安装的虚拟机较多&#xff0c;给加块闲置硬盘&#xff0c;顺便学习一下&#xff0c;像pve这种虚拟机系统&#xff0c;硬盘应该可以像nas你这样随时增加&#xff0c;而不影响上层应用&#xff0c;我自己也是摸索着做。 一、安装好硬盘后打开pv…

vue3+ts-tsconfig.json报错Option ‘importsNotUsedAsValues’

vue3ts-tsconfig.json报错Option ‘importsNotUsedAsValues’ is deprecated and will stop functioning in TypeScript 5.5. Specify compilerOption ‘“ignoreDeprecations”: “5.0”’ to silence this error. Use ‘verbatimModuleSyntax’ instead 自我记录 翻译 选项…

智能家居(2)---串口通信(语音识别)控制线程封装

封装语音线程&#xff08;语音通过串口和主控设备进行交流&#xff09;实现对智能家居中各种灯光的控制 mainPro.c(主函数) #include <stdio.h> #include "controlDevice.h" #include "inputCommand.h" #include <pthread.h>struct Devices …

echart 3d立体颜色渐变柱状图

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 1.需求描述 根据业务需求将不同的法律法规&#xff0c;展示不同的3d立体渐变柱状图。 2.先看下效果图 3. 确定三面的颜色&#xff0c;这里我是自定义的颜色 // 右面生成颜色const rightColorArr ref(["#79D…

ComponentOne Studio ASP.NET MVC Crack

ComponentOne Studio ASP.NET MVC Crack FlexReport增强功能 添加了对在Microsoft Windows上部署Microsoft Azure的支持。 添加了对显示嵌入字体的支持。 .NET标准版的经典C1PDF(Beta版) GrapeCity的经典C1Pdf库现在提供了基于Microsoft.NET标准的版本。在任何.NET应用程序(包括…

每日一学——IP寻址

IP寻址是指在网络中分配和识别设备的唯一IP地址。IP地址是由一串数字组成的标识符&#xff0c;用于在网络中定位和识别设备。 IPv4是最常用的IP地址版本&#xff0c;它由32位的地址组成&#xff0c;通常表示为四个以点分隔的十进制数字&#xff08;例如192.168.0.1&#xff09…

江南大学计算机考研分析

24计算机考研|上岸指南 江南大学 江南大学计算机考研招生学院是人工智能与计算机学院。目前均已出拟录取名单。 江南大学人工智能与计算机学院成立于2020年3月&#xff0c;办学历史可追溯到1994年设立的计算机应用专业。学院秉持江南大学“彰显轻工特色&#xff0c;服务国计民…

【数据结构】栈和队列

【数据结构】栈和队列 一&#xff1a; 栈1.栈的概念及和结构2. 栈的实用3. 栈接口实现 二&#xff1a; 队列1. 队列的概念和结构2. 队列的实用3. 队列接口实现 三&#xff1a;扩展 一&#xff1a; 栈 1.栈的概念及和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许…

SAP安全库存-安全库存共享、安全库存简介

SAP系统中的安全库存用于管理计划外和计划内的库存需求,在某些行业中,由于不同的情况,如意外损耗、损坏、环境问题、制造工艺问题、需求增加等,通常会出现意外的库存需求。 SAP提供了维护安全库存的处理方式来处理这样的问题,安全库存的字段信息在主数据视图中,在物料需…

题解 | #1002.Shortest path# 2023杭电暑期多校9

1002.Shortest path 签到题 记忆化搜索 题目大意 给定一个正整数 n n n &#xff0c;可以对其进行以下操作&#xff1a; 如果 n n n 能被 3 3 3 整除&#xff0c;则可以使 n n / 3 nn/3 nn/3 ;如果 n n n 能被 2 2 2 整除&#xff0c;则可以使 n n / 2 nn/2 nn/2 …

【C++】deque容器

0.前言 1.deque构造函数 #include <iostream> using namespace std; #include <deque>//deque构造函数 void printDeque(const deque<int>& d) {for (deque<int>::const_iterator it d.begin(); it ! d.end(); it){//*it 100; //加了const就不能…

go的gin和gorm框架实现切换身份的接口

使用go的gin和gorm框架实现切换身份的接口&#xff0c;接收前端发送的JSON对象&#xff0c;查询数据库并更新&#xff0c;返回前端信息 接收前端发来的JSON对象&#xff0c;包含由openid和登陆状态组成的一个string和要切换的身份码int型 后端接收后判断要切换的身份是否低于该…

windows下dll文件的创建详细教程

1、前言 dll文件是啥&#xff0c;就不作过多赘述了。现在直接教大家如何创建与使用dll文件。 本文基于windows系统&#xff0c;使用的编译相关工具为visual studio 2019。 2、创建dll 2.1 创建dll工程 首先打开visual studio&#xff0c;然后选择创建新项目&#xff0c;在搜…

Word(1):文章页码设置

1.需求 在文档的封皮页不设置页码&#xff0c;在目录页页码设置为罗马数字&#xff0c;在正文使用阿拉伯数字。 2.解决方法 step1&#xff1a; 在封皮页的最后&#xff0c;点击”插入“-分隔符-分节符&#xff08;下一页&#xff09; step2&#xff1a;在目录页的最后&…