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

《走进对象村4》之面向对象的第一大特性——封装

文章目录

  • 🚀文章导读
  • 1、封装的概念
  • 2、访问限定修饰符
  • 3、如何进行封装
  • 4、封装的优点:

🚀文章导读

在本篇文章中,将详细的对封装进行总结,文章仅仅是个人的一些理解,如果有错误的地方,还望指出看完本篇文章,必须理解以下几个问题:

1、什么是封装,封装的意义是什么?

2、如何进行封装

3、封装的优点是什么?

4,四个访问限定修饰符的功能及用法

1、封装的概念

面向对象的三大的特征:封装、继承、多态。封装是一种信息隐藏技术。

封装概念:把一个对象的属性进行私有化,同时提供一些可以被外界访问的属性的方法。

封装的意义:把类中的属性和方法封装在一起,使外部只能通过特定的方法访问类中的属性和方法,这样就可以防止外部直接修改类中的属性和方法,从而有效的控制类内部的状态。

以上是封装的概念,关于封装的概念,网上都是五花八门的,只要简单的理解就行,不用死记概念,那么,要想理解封装,就要先知道封装是如何体现出来的,通过什么对成员属性进行封装,下面就来看一些访问限定修饰符,封装时又用到了哪个修饰符。

2、访问限定修饰符

首先让大家看一张图,下面我将结合代码为大家讲解封装所用的修饰符,在java中,可以使用访问修饰符来保护对 类、变量 、方法、以及构造方法的访问、Java支持四种不同的访问权限;

在这里插入图片描述

**private:**在一包同一类中可见。使用对象:成员变量,成员方法。注意不能修饰类(外部类)

default:在类中是默认的,当没有用任何访问修饰符修饰时,默认的就是default;在同一包同一类和同一包不同类中可见;使用对象:类、接口、方法、变量;

protected:对同一包中的类和所有子类可见,使用对象:变量、方法;注意,不能修饰类(外部类)

public:对所有类可见,使用对象:类、接口、变量,方法

1、private修饰符:对类中的成员属性进行隐藏,防止被外部类访问,这个修饰符就是进行封装的一种体现,说白了就是,要想进行封装,就要用private进行修饰

3、如何进行封装

下面用代码进行讲解:

图中,定义了一个Student类,而类中的成员属性name 和 age都是用private进行修饰的,然后在main方法中实例化了一个Student对象,通过对象的引用来访问Student中的成员属性,包括private修饰的属性也能访问,不过要注意,此时是在一个类中。

在这里插入图片描述

上图是在同一个类的情况下,对private修饰的name可以进行访问,但是请看下图中出现的情况。定义了两个类,Student 和 TestStudent ,在TestStudent类中访问Student类中的被private修饰的成员属性,可以看到,没办法进行访问,这也就印证了上面所说的,private对类中的成员属性进行了隐藏,防止被外部类进行访问。

在这里插入图片描述

问题:

如果想要在一个类中访问另一个类中用private修饰的成员属性(变量)时,应该怎么做?

解答:

如果想要对不同类中的private修饰的成员属性进行访问,需要在该类中提供一些访问这些属性的方法,而这些方法都是用public进行修饰的,如果想要在外部类中访问这些成员属性时,直接调用这个方法就可以了!下面用代码进行演示。

这些方法可以是我们自己写的方法,也可以使用快捷方法来创建这些方法,下面给大家演示。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在TestStudent类中就可以通过对象的引用来调用Student类中所提供的方法来对这些被private所修饰的属性进行访问。以上就是用快捷方式创建的方法,当然我们也可以自己定义方法。这里就不再演示。

所以封装主要是通过private来实现的,对类中的成员属性进行私有化,成员属性用private修饰,向外界提供的访问这些属性的方法用public进行修饰

4、封装的优点:

1、隐藏实现细节

2、安全性

3、增加代码的复用性

4、模块化

http://www.lryc.cn/news/65680.html

相关文章:

  • 罗马数字转整数、整数转罗马数字----2023/5/4
  • 2023-05-04:用go语言重写ffmpeg的scaling_video.c示例,用于实现视频缩放(Scaling)功能。
  • QT Android QTextEdit 复制粘贴文本后出现多余数据问题
  • 知识变现海哥:你为什么努力却不富有,大概率是你不懂这个道理
  • 【Mybatis】增删改查
  • 20230504----重返学习-vue2项目-跳转拦截-重定向并返回前一页-使用vuex调用接口-全选与全不选-总价计算
  • (异或相消)猫猫数字异或和
  • 树脂塞孔有哪些优缺点及应用?
  • 【Robot Framework】RF关键字大全
  • Xilinx Artix-7【XC7A35T-2CSG324I】【XC7A35T-1CSG324I】成本与收发器优化的FPGA器件
  • K8S之自定义Controller
  • 无线电相关的SCI期刊有哪些? - 易智编译EaseEditing
  • Rust - 结构体基本使用
  • 29. Kubernetes 核心组件讲解——Controller Manager
  • BetaFlight统一硬件配置文件研读之feature命令
  • ChatGPT 不好用?那你看下这份 Prompt 工程指南
  • 冲浪杂记——
  • 深入理解Python中的进程与线程
  • Data retry场景介绍
  • lua | 数组与迭代器的使用
  • 【云原生】云原生服务网格流量控制思考
  • 《数据库的嵌套查询和统计查询》
  • 【网站架构】Nginx 4层、7层代理配置,正向代理、反向代理详解
  • mysql备份和恢复
  • 新闻月刊 | GBASE 4月市场动态一览
  • Java --- springboot2数据响应与内容协商
  • “中特估”乘风破浪!后续机遇在哪?
  • OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法3
  • 功率放大器在Lamb波信号波包模型验证研究中的应用
  • Apache Hadoop