#面向对象的三大特性——封装(java)

大家好,我是peace,励志追求代码的和平稳定,今天我们来聊一聊面向对象的三大特性之一封装,在此之前,相信大家对面向对象有一定的了解了,如果还是不太了解的,可以先去看看我的这篇文章《跟大家一起聊一聊面向对象程序设计(OOP)》。话不多说,我们继续聊一聊封装,这里我主要以java作为载体进行讲解。

封装

单从表面意思来看,封装就是找个容器把东西封好装起来。而且既然东西被封装起来了,那我们外部人员就是无法直接去接触。比如举个现实中的栗子:酿酒。

不知大家有没有酿过酒,我家就时常酿酒,主要步骤无非是找个干净的容器,把酿酒的材料放进去,然后将瓶口封装起来,禁止其与空气接触,以防其变质。

而java在运用封装时其实和酿酒的操作很像,首先java支持将一个事物抽取成一个抽象的class(类),而我们可以把类想象成一个容器,而类中的的属性或方法可以看成是酿酒的材料,至于如何把它封装起来,Java中提供了关键字private,只要在属性或方法前加上它之后,除了类本身可以直接访问它们外,其它类都无法直接访问。只能通过类对外暴露的方法进行间接访问,就好比我无法触碰到酒坛里的酒,但我可以通过摇酒坛子间接改变里面的酒。

通过这个栗子,相信大家应该能有所感触。接下来我们来说说封装的一些优点:

  1. 增强了安全性,对属性和方法进行了封装,开放一些许可的操作方法,能防止一些恶意的外部操作
  2. 增强了模块化,降低了代码的耦合度,只有与类相关或类特有的属性和方法才封装进类之中,使代码易维护,易复用。
  3. 提高了开发效率,封装代码的细节,对外开放使用接口,使用者无需深入代码细节,只需懂得使用方法,避免重复造轮子。

注意:我们不能以为只有类才能作为容器,这样想未免把封装思想想的太狭隘了,除了类外,一个包或者一个项目模块也能抽象成一个容器来运用封装思想,所以我们需要站在不同的维度去看待问题。

在这里扩展一下java中对于封装所提供的关键字,它们提供了对类成员变量的着不同的权限,如下图:

  • public:在全局范围内都可以访问,这个应该很好理解。
  • protected:在同一类中和同一包中可访问这没有问题,主要是两个类在 不同包下 要满足以下条件才能访问: 1.两个类需要有继承关系。2.只能在子类中用super关键字访问父类,用new出来的父类对象无法访问父类属性。3.父类无法访问子类属性。 (以上是我通过测试总结出来的,大家可自行测试)
  • default:java默认就是这个权限,在同一类中和同一包中可访问。
  • private:只有在同个类中才能访问,这个也是最常使用的关键字

我这里没有放示例代码,希望大家自己敲一敲代码,感受一下封装的魅力,毕竟只有自己动手做了才能印象更深。

还有希望大家要注意的是许多东西是要讲究适度的,封装优点虽然多,但也要适当的去使用,过度的封装会使弊大于利,甚至让优点变成缺点,至于怎样封装最合适,这个就需要根据具体需求具体分析了,也就需要自己多加练习积累项目经验,才能游刃有余的使用封装。

总的来说封装的含义就是:隐藏你想隐藏的实现细节,暴露你认为安全的操作方法

posted @ 2020-08-28 17:43  平兄聊Java  阅读(133)  评论(0编辑  收藏  举报