当前位置: 首页 > news >正文

【JAVA】为什么要使用封装以及如何封装

在这里插入图片描述


个人主页:【😊个人主页】
系列专栏:【❤️初识JAVA】


前言

Java的封装指的是在一个类中将数据和方法进行封装,使其可以保护起来,只能在该类内部访问,而不允许外部直接访问和修改。这是Java面向对象编程的三个基本特性之一,另外两个是继承和多态。在此之前我们已经学习过关于继承的概念,今天我们来学习有关封装的内容。
在这里插入图片描述

封装的含义

封装是面向对象编程的一种重要概念,是将数据和对数据的操作封装在一个类中,使得数据对外部的访问受到限制,只能通过类中的公共方法来访问或操作。封装的目的是隐藏类的实现细节,并且保护数据不被随意修改,从而增强了代码的安全性和可维护性。另外,封装也使得代码的扩展和修改更加方便,只需在类内部进行修改而不需要修改其他代码。

通过封装,可以提高类的安全性可维护性,使得类的实现细节被隐藏,只暴露出有限的接口和功能给外部使用,从而减少了类之间的耦合性。同时,封装还可以实现数据隐藏和数据保护,提高程序的可靠性可扩展性

四种访问控制符

Java中,采用访问控制符来控制类中数据成员和方法的访问权限,主要有四种访问控制符:public、private、protected和默认访问控制符(即不写访问控制符)。

  • public:表示该数据成员或方法可以被其他任何类访问
  • private:表示该数据成员或方法只能在当前类内部访问
  • protected:表示该数据成员或方法可以在当前类和其子类中访问
  • 默认访问控制符:表示该数据成员或方法只能在同一个包内的其他类中访问

封装的两种经典实例

银行账户类

该类的主要属性包括账户名、账号、账户余额等。其中账户余额是一个私有属性,外部无法直接访问。类中提供了一系列操作账户的方法,例如存款、取款、查询余额等。这些方法都能够在保证账户余额正确的情况下,修改账户余额。

public class BankAccount {private String accountNumber;private double balance;public BankAccount(String accountNumber, double balance) {this.accountNumber = accountNumber;this.balance = balance;}public String getAccountNumber() {return accountNumber;}public double getBalance() {return balance;}public void deposit(double amount) {balance += amount;}public void withdraw(double amount) {if (balance >= amount) {balance -= amount;} else {System.out.println("Insufficient balance.");}}
}
  • accountNumber: 表示账户号码的字符串。
  • balance: 表示账户余额的双精度浮点数。
  • BankAccount(String accountNumber, double balance): 构造函数,用于创建一个新的银行账户对象。
  • getAccountNumber(): 返回账户号码的方法。
  • getBalance(): 返回账户余额的方法。
  • deposit(double amount): 存款方法,用于向账户中添加资金。
  • withdraw(double amount): 取款方法,用于从账户中扣除资金。如果账户余额不足,将输出一条错误信息。

学生类

public class Student {// 属性private String name;private int age;private String gender;private String id;// 构造方法public Student(String name, int age, String gender, String id) {this.name = name;this.age = age;this.gender = gender;this.id = id;}// 方法public void study() {System.out.println("学生正在学习");}public void showInfo() {System.out.println("姓名:" + name);System.out.println("年龄:" + age);System.out.println("性别:" + gender);System.out.println("学号:" + id);}// Getter和Setter方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getId() {return id;}public void setId(String id) {this.id = id;}
}
  • 属性:学生类具有姓名、年龄、性别和学号这些属性。
  • 构造方法:学生类具有一个带四个参数的构造方法,用于初始化学生对象。
  • 方法:学生类具有学习方法和展示学生信息的方法。
  • Getter和Setter方法:学生类具有获取和设置属性值的Getter和Setter方法,用于保护属性的私有性。
http://www.lryc.cn/news/180653.html

相关文章:

  • 18.示例程序(编码器接口测速)
  • 【超详细】Fastjson 1.2.24 命令执行漏洞复现-JNDI简单实现反弹shell(CVE-2017-18349)
  • 【牛客网】JZ39 数组中出现次数超过一半的数字
  • 【Mysql】Lock wait timeout exceeded; try restarting transaction
  • python生成中金所期权行权价
  • CentOS7.9 安装postgresql
  • qt线程介绍
  • 记一次用dataframe进行数据清理
  • 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件
  • Vue3 引入使用 vant组件详解
  • NOSQL Redis Ubuntu系列 常用的配置 及密码登录
  • C语言解析GPS源数据
  • 【论文阅读】(CVPR2023)用于半监督医学图像分割的双向复制粘贴
  • [Linux 基础] 一篇带你了解linux权限问题
  • FPGA project :HDMI
  • 基于微信小程序的物流快递信息查询平台同城急送小程序(亮点:寄件、发票申请、在线聊天)
  • idea插件推荐
  • Arcgis快速计算NDVI
  • SpringCloud Alibaba - 基于 FeignClient 整合 Sentinel,实现“线程隔离”和“熔断降级”
  • Acwing 906. 区间分组
  • 阿里云 Oss 权限控制
  • CSS详细基础(六)边框样式
  • 支持向量机SVM:从数学原理到实际应用
  • 【办公自动化】在Excel中按条件筛选数据并存入新的表(文末送书)
  • 第三章:最新版零基础学习 PYTHON 教程(第十一节 - Python 运算符—Python 中的any与all)
  • Pytorch单机多卡分布式训练
  • asp.net coremvc+efcore增删改查
  • Java基础面试,什么是面向对象,谈谈你对面向对象的理解
  • Ubuntu系统初始设置
  • 焕新古文化传承之路,AI为古彝文识别赋能