封装与访问控制

时间:2022-05-07 05:51:33

面向对象编程(OOP)最重要的重点之一是信息隐藏,类是数据和方法的集合,这意味着类以外的代码不能直接使用类的数据,而只能通过方法来访问

1、封装的概念

封装是指将东西包装在一起,然后以新的完整形式呈现。对于OOP而言,幸将方法和属性一起包装到 程序单元中,这些单元以类的形式实现。用计算机专业术语讲,隐藏属性、方法和实现的详细信息的处理方式称为封装

封装的好处之一是隐藏信息。“信息隐藏”是一个强大的技术工具,它能降低程序的复杂性。在创建类时,会根据完成任务的需要创建许多属性和方法,而只有被其他程序访问的那紫属性和方法才对外公开。

2、封装的实现

封装就是将属性私有化,提供公有方法访问私有属性。做法是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)和赋值(setter)方法,用以访问这些属性。

Java语言具有隐藏类中复杂的实现细节的机制,这是通过为每个成员指定访问修饰符来实现的。访问修饰符可以确定如何访问某个成员。访问控制在某些方面与继承或包密切相关。

(1)Public

类的public成员可以被该类的成员和非该类的成员访问,例如,如果user类具有一个名为username的公有成员,则该成员可以被user类的所有成员方法和用户自定义的其他类的成员方法访问 。

(2)Private

类的private成员只能被该类的成员访问。任何非该类成员的代码不能访问任何私有方法或变量,使用private访问修饰符的主要目的是隐藏 数据 。

(3)Protected

类的protected(保护)成员可以被该类的成员以及其子类的成员访问,还可以被同一个包内其他类的成员访问 。

还有一个缺省(default)情况,即类的成员没有个包符,此时只有它本身的类和在同一个包的类里可以访问它。

访问修饰符及其缺少情况对类成员访问的限制总结如表:

位置                private       default     protected   public

同一个类           可访问       可访问     可访问    可访问 

同一个包内的类    不可访问      可访问     可访问    可访问 

不同包内的子类    不可访问    不可访问     可访问     可访问

不同包并且不是子类 不可访问   不可访问     不可访问   可访问

JAVA中类的属性的具体封装步骤如下。

   (1)修改属性的可见性来限制对属性的访问。

    (2)为每一个属性创建一对赋值和取值方法,用于对这些属性进行访问。

   (3)在赋值方法和取值方法中,加入对属性的存取限制。

3、封装的优势

(1)隐藏实现细节。这样做可以防止程序员依赖这些细节,也就是说,程序员无须担心对任何实现细节所做的更改,因为这些更改不会影响使用该类的其他代码。

(2)实现对属性访问的限制,增强程序的可维护性。

(3)防止用户意外地删除数据。例如,类可以包含许多相互信赖的字段,如果程序员对其中任何一个字段段子更改,而未更改相关的字段,则可能会产生错误,然而,如果用方法来更改字段,则可以确保更改所有相关字段的值,使类的状态保持一致。类还可以隐藏它的一些方法,以防止用户调用这些方法。

(4)隐藏类的信息,使类更容易使用和理解。