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

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方法


谁调用getAge(),return就把值返回给谁,最后再来一个变量接收数据即可

posted @ 2024-11-23 11:42  直実  阅读(39)  评论(0)    收藏  举报