封装、权限修饰符、封装的案例

news/2025/2/27 9:14:55/文章来源:https://www.cnblogs.com/zhishi6/p/18564277

1.面向对象的三大特征

其中继承和多态放在后面讲,今天只聊封装

.

2.封装的介绍

举例

如果要我们处理一堆学生的数据,我们可以直接设计一个类,将我们需要处理的数据封装到类当中变为成员变量,然后我们直接创建两个对象,再将数据封装到对象中即可

.

3.封装的好处

1.便于我们维护数据。例如刚才处理学生数据,如果直接定义一大包变量十分臃肿

2.方便使用者使用。使用者无需关心内部实现,只要知道如何使用就行

.

举例:如同一辆车,使用者完全不需要知道汽车内部如何构建运作,使用者只需要知道怎么开车就行

.

4.封装的设计规范

依旧拿汽车举例,商家会把引擎,发动机给使用者看吗,商家只会把拉杆,方向盘暴露出给使用者,而其他没必要的东西都会用壳子包裹隐藏,这就是合理隐藏,合理暴露


.

举例:

如上图,savelog方法是完全服务于call方法的,打完一次电话就会记录,那么savelog方法就应该被隐藏,为什么? 如图

我们如果没有隐藏savelog方法,那么使用者就有可能直接调用savelog方法而略过call方法,但是savelog是服务于call方法的,你连电话都没打,你记录什么?因此,savelog需要被隐藏。但该怎么隐藏呢?

我们只需要把public改成private即可,修改完以后,savelog就只能在Phone这个类里使用,而无法在测试类使用

.

6.权限修饰符

权限修饰符可以修饰成员,即成员变量和成员方法

不同的权限修饰符,所修饰的成员的权限访问大小不同

.

1.private

修饰的成员的访问权限只能在同一个类中 如图

age只能在Student类中使用,无法在测试类中调用,而name可以在测试类中调用


当我们在Student类中调用age没有报错,并且可以在测试类中使用

.

2.(defalut)

修饰的成员的访问权限只能在同一个类中,同一个包中

(defalut) 是默认权限,并不是在变量前面写这个,而是什么都不写 如图

当Student和测试Student同在project包中,访问没问题。当把测试类放到test的包中,访问就报错了

.

3.protected

修饰的成员的访问权限在同一个类中,同一个包中,不同包的子类中

这个之后再说

.

4.public

任意位置,但别太过分,别跨模块就行(day7和day8不同模块)

.

7.案例

如图

年龄为-28明显是错误的,但程序这里不报错,因此,为了数据的安全性,我们必须私有个人信息

错误的数据进不来了,但正确的数据也进不来了,怎么办?先别急,这里我们需要学习两个新的方法

.

针对私有的成员变量,提供对应的set xxx 和get xxx方法

set:设置

get:获取


如图,我们写了一个setAge方法,在该方法里进行判断年龄是否符合常理,符合则给予赋值,否则提示

1000不符合常理,所有就打印了提升,29则给予赋值,没有提示

.

写完setAge还没有结束,我们会发现现在只是给用户提供了设置年龄的渠道,但用户现在没有获取年龄的渠道,无法拿着数据进行其他操作

setAge仅能用于设置,并没有数据返回给setAge,无法用来操作

所以我们还要写一个getAge方法


return在哪个方法,返回的值就返回给哪个方法,所以getAge收到返回值,再来一个变量接收数据即可

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

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

相关文章

【Atcoder训练记录】AtCoder Beginner Contest 381

训练情况赛后反思 简单题A题做红温了,怒吃 6 罚时,C题双指针其实差不多想出来了,但是对于判断字符串合法其实可以只判断两个端点,不需要全部遍历,中途还想了二分做法(?),然而写到最后发现并没有二分单调性。 A题 记得判断字符串的长度必须是奇数,\(1 \sim \frac{n+1}…

putty中设置白色背景、黑色字体

001、 002、 003、 前景色全部改为0 004、 背景色全部改为255 。

【牛客训练记录】牛客小白月赛105

训练情况赛后反思 看十佳歌手去了,比较晚回来,只开了A题,B题不看数据范围直接一眼丁真直接WA了一发 A题 两个数相乘进行比较,再判断即可。 #include <bits/stdc++.h> #define int long long #define endl \nusing namespace std;void solve(){int a1,b1,a2,b2; cin&g…

Win 11史诗升级,终于能完美兼容安卓生态

曾几何时,Windows与安卓设备之间的壁垒让人头疼不已。如今,微软再一次引领变革!Windows 11迎来了“史诗级”升级,安卓生态的完美兼容终于成为现实。这次升级将如何改变我们的使用体验? Win 11 的安卓兼容性升级具体实现了哪些突破?它对用户工作和娱乐方式有怎样的深远影响…

MPU6050 原理及驱动

MPU6050 姿态传感器原理分析MPU6050 是一款由 InvenSense 设计的低成本紧凑型 6 轴姿态传感器。该传感器可提供三轴角速度、三轴加速度和芯片温度数据。主设备可通过 I2C 与之进行通讯,从而获取并解算测量数据。MPU6050 技术参数3 轴陀螺仪(16位):量程范围为 250、500、100…

1.11--01:查找最接近的元素

http://noi.openjudge.cn/ch0111/01/查找最接近的元素 题目传送门 思路 可以看到数据范围,如果我们两层循环mn,10000*100000,时间复杂度绝对爆炸 所以我们就需要用到二分查找 什么是二分呢? 通俗的讲,就是每次砍半 假设我们在10个数据中查找接近7的元素 \(1 3 4 8 10 12 3…

一行代码搞定Windows/Office,史上最简单操作

曾几何时,安装和激活 Windows 或 Office 是让小白头疼的大工程,繁琐的操作让人心力交瘁。而今天,我们只需要一行代码就能轻松搞定!是不是听起来很不可思议? 一行代码究竟如何实现 Windows 和 Office 的快速激活?它是否既高效又安全?如今,无论是学习还是办公,都离不开 …

触想工业显示器应用于光伏自动化设备,助力绿色低碳能源发展

一、行业发展背景受能源危机影响及全球碳中和政策利好,近年来,我国光伏产业呈现快速扩张趋势。作为光伏组件核心发电设备,电池片的市场供需被同步拉高,也带动了电池片制造设备等周边产业的迅速成长。△光伏产业快速成长与此同时,旺盛需求带来的激烈竞争格局不断加剧产业“…

Drools与动态加载规则文件

Drools简介Drools是一款基于Java的开源规则引擎,将规则与业务代码解耦。规则以脚本的形式存储在一个文件中,使规则的变化不需要修改代码,重新启动机器即可在线上环境中生效。规则引擎实现了业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据…

Drools决策表实践运用

决策表使用方式在Drools中,决策表通常是以Excel(.xls或.xlsx)或者CSV格式存储的,这些格式的决策表并不能直接被Drools执行。它们需要被转换成Drools规则语言(DRL)的文本格式,之后才能被编译和执行。Drools提供了工具来帮助完成这一转换,主要使用org.drools.decisiontab…

Economies of Scale

规模经济(Economies of Scale) 规模经济指的是随着生产规模的扩大,单位产品的平均成本下降的现象。这通常发生在企业生产规模增加到一定程度时,由于固定成本(如厂房、机器设备等)被更多的产品分摊,单位产品的固定成本降低,同时由于规模的扩大,企业可能会享受到采购原材…

Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET

在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET binary.一、现象 在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应…