封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制对象属性的读和修改的访问级别。那么类的封装如何实现呢?
(1)修改属性的可见性,在属性的前面添加修饰符(如private)。
(2)对每个值属性提供对外的公共方法访问,如创建 getterXXX/setterXXX(取值和置值,其中XXX是类中的属性名)方法,用于对私有属性的访问。
(3)在getterXXX/setterXXX方法里加入属性的控制语句,例如我们可以加一个判断语句,对非法值给予限制。
如果我们没有在属性前面添加任何修饰符,我们通过对象就可以直接对属性值进行修改,没有体现封装的特性。这在程序设计中是不安全的,所以我们需要利用封装来改进代码。
首先在类里的属性前面添加 private 修饰符,然后定义 getter 和 setter 方法。修改例4.6中的两个类,分别把 Employee类改为Employee1类,Example4_6修改成Example4_7,实现如下:
【例4.7】
Example4_7.java
程序Example4_7运行结果如图4.8所示。
(www.daowen.com)
图4.8 封装实现
说明:
(1)private修饰的成员变量在其所在类中可以直接访问,在类外不可以通过对象.属性名进行访问。
(2)private修饰的成员,虽然无法在类外通过对象.属性名进行引用,但在类中可以对外提供公开的用于设置或获取对象属性的public方法。
(3)通过在类中用public权限的getter和setter方法分别获得或修改私有成员变量的值。
(4)为防止给封装了的成员变量设置非法值,通常会在setter方法中加入逻辑判断,用以过滤非法数据。
【例4.8】定义一个能实现两个数的加减乘除的计算器类,并测试。
分析题意知,计算器类的成员变量至少有三个:两个运算数及运算符。为了实现封装可以把三个成员变量用private进行修饰。成员方法需要有成员变量相应的getter和setter方法及实现计算的calculate方法。本例直接将运算结果在calculate方法中进行输出,因此calculate方法无返回值,并且在进行除法运算时,需要判断除数是否为0,若除数为0,则在输出结果中需要给出相应的提示。具体实现参看Example4_8.java。
Example4_8.java
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。