首页 理论教育 Java程序设计中的类封装

Java程序设计中的类封装

时间:2023-11-01 理论教育 版权反馈
【摘要】:类的封装,是指将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。图3-19MyCircle5类的设计在类My Circle5中,实例变量radius被私有化,意味着外部程序无法通过对象直接访问该属性。图3-20私有化成员属性的getter/setter程序第6行,在测试类中对另一个类的私有属性直接赋值,系统报错,保护了数据安全。private仅仅是封装的一种体现形式,不能说封装就是私有。

Java程序设计中的类封装

类的封装,是指将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口特定的访问权限来使用类的成员。

在设计一个类时,如果有些成员不允许外部直接访问,则需要将其封装起来。在Java语言中,可以通过private关键字来封装成员,避免外部用户直接访问它。

如果用private关键字对需要保护的成员变量进行修饰,则可以阻止不合理的数值被设置进来。需要注意的是,一旦使用了private关键字,被修饰的成员变量在本类当中可以被随意访问,超出了本类范围就需要间接访问。如何间接访问呢?需要在类中为该成员变量定义公共的get Xxx()方法(即读取器getter)或者set Xxx()方法(即设置器setter)。

注意:

get Xxx()方法/set Xxx()方法的方法名,命名规则是get/set后加首字母大写的变量名。对于getter来说,不能有参数,返回值类型和成员变量对应;对于setter来说,不能有返回值,参数类型和成员变量对应。

【例3-9】

设计一个类,将部分成员私有化,并提供相应的get Xxx()方法或(和)set Xxx()方法。

My Circle5类的设计如图3-19所示。

图3-19 MyCircle5类的设计

在类My Circle5中,实例变量radius被私有化,意味着外部程序无法通过对象直接访问该属性。假设该属性不被私有化,那么用户就可以在程序中将一个MyCircle5对象的radius值设置为任意double型的值(例如无意或恶意地篡改为负值),这是很危险的。因此,正确的做法是通过private关键字将radius属性封装起来,为了读取和设置该私有属性,本例提供了radius属性的getter和setter。类似地,也将静态变量instancesCount私有化了,不同的是,该属性是随着对象的创建而自动计数,逻辑上不能通过外部程序任意设置,因此,针对该属性只提供了公共的读取器getter,而没有提供设置器setter。

下面通过测试用例My Circle5Test来演示属性私有化后的效果,如图3-20所示。

(www.xing528.com)

图3-20 私有化成员属性的getter/setter

程序第6行,在测试类中对另一个类的私有属性直接赋值,系统报错,保护了数据安全。其实,提供getter/setter来控制成员属性的读写,是因为方法能够提供方法体,方法体中可以加入属性控制语句,对属性值的合法性进行判断。通过属性私有化,同时提供相应的getter或setter间接访问兼顾了属性的安全性和可用性

在Eclipse中,可以借助工具辅助生成属性的getter和setter。步骤如下:

步骤1:首先定义好类的成员属性,然后在代码区空白处点击鼠标右键,选择弹出菜单【Source】下的【Generate Getters and Setters】选项,如图3-21所示。

图3-21 找到“Generate Getters and Setters”

步骤2:在弹出的对话框中根据属性选择需要创建的getter方法和setter方法,如图3-22所示。

图3-22 选择需要创建的getter和setter

步骤3:点击【OK】按钮后即可生成默认代码。然后根据需要,在生成代码的基础上修改即可。

注意:

封装就是将一些细节信息隐藏起来,对于外界不可见。private仅仅是封装的一种体现形式,不能说封装就是私有。比如,方法也是一种封装。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈