1.5 面向对象之封装

1.5 封装的定义

       封装是对对象内部部分信息的隐藏,不允许直接对这些信息进行访问,要操作这些信息必须通过预留的接口。
       为什么需要对对象信息进行封装
(1)严格控制访问权限,保护属性不被污染,减少了模块间的相互干扰;
(2)更精准的操作属性,能够让使用者清晰的知道实在进行都还是写操作;
(3)方便维护和实现。
       封装的关键概念

1.5.1 public 允许项目内任意对象对其进行访问;

       在test包内定义Company对象,在该对象内部使用public创建product方法
在这里插入图片描述

       在pack包内创建主类,来调用Company类的product方法。
在这里插入图片描述

       通过结果我们可以看出,在调用product方法时几乎没有受到限制。
在这里插入图片描述

1.5.2 default

       默认允许当前包范围的访问,同样在test包下的Company中定义一个方法,不使用关键字。
在这里插入图片描述

       在pack包下的主类中进行调用,我们可以发现被拒绝访问了。
在这里插入图片描述

       将Company移动到pack包下,我们就可以发现允许访问,且能正常执行了。

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

1.5.3 private

       仅允许本对象内部访问,private广泛应用于定义实体,比较直白,就是只允许类内部访问,其他对象不允许直接调用;首先在Company中定义一个私有的属性。
在这里插入图片描述

       在同包的主类中直接进行调用,会发现我们没有权限进行访问。
在这里插入图片描述

       但是在本类中不管时直接实例化一个对象,还是通过this直接进行调用都是可以的。
在这里插入图片描述

1.5.4 protected

       允许同包内和子类访问,同包内好理解,就和默认的差不多,但是子类这里说的就比较模糊,个人感觉说子类也不太准确,准确的应该是子类只可以调用自己继承部分的protected方法,其子类包不可以访问子类继承的该方法,这里主要介绍父子类跨包的使用。首先在pack中定义一个User类,其中定义一个使用protected修饰的类。

在这里插入图片描述

       在test包下新建Company类,继承User类。
在这里插入图片描述

然后在Company中直接使用this和实例化一个Company来调用父类的work方法,发现是能够成功调用的;

在这里插入图片描述

       但是我们试图通过实例化父类来调用work方法就发现被拒绝访问了,所以我们可以得出,子类调用父类protected修饰的方法时是失败了,子类调用的仅仅是子类继承的部分。
在这里插入图片描述

       并且当我们试图使用在子类的包内其他对象中调用子类继承的work方法时,发现也被拒绝访问了。
在这里插入图片描述

1.5.5 封装的实现步骤

       主要介绍平时开发中最常见的一种封装的体现,使用private限制对属性的访问,这种方法俨然已经成为了一种开发规范,比如定义一个User类,将用户的信息属性私有化,隐藏了属性细节:
在这里插入图片描述

       当需要访问这些属性的时候,会提供一组对外开放的方法(getter和setter方法),分别可以对属性进行读和写:

       当要使用这些属性的时候我们就可以通过getter和setter方法来处理:
在这里插入图片描述

       允许结果如下:

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴趣使然的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值