Java编程详解(微课版)
上QQ阅读APP看书,第一时间看更新

2.3 信息的封装和隐藏

2.3.1 知识准备:信息的封装

封装指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。

Java程序通过将数据封装声明为私有的(private),再提供一个或多个公开的(public)方法实现对该属性的操作,可以实现下述目的。

(1)隐藏一个类的属性和实现细节,仅对外公开接口,控制程序中属性的可读和可修改的访问级别。

面向对象的封装

(2)增强安全性,防止对封装数据的未经授权的访问。使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作。

(3)有利于保证数据的完整性。

(4)增强代码的可维护性,便于修改。

(5)实现封装的关键是不要让方法直接访问其他类的属性,程序应该只能通过指定的方法与对象交互数据。封装赋予对象“黑盒”特性,这是实现重用性和可靠性的关键。

2.3.2 知识准备:信息的隐藏

如果允许用户对属性直接访问,可能会引起一些不必要的问题。例如,声明一个Group类表示一个程序开发小组,由属性number来记录小组成员数,如果允许程序随意给number属性赋值,如将值设置为1000,虽然这在语法上没有问题,但是一个程序小组不可能有这么多的编程人员,如果在程序的其他部分用到了这个number属性,可能会出现问题。因此,应该将属性定义为私有的(private),只有类本身才可以访问这个属性,外部程序或者其他类不能访问它。可以定义一些public或Default方法来访问这些属性,在方法中加入一些逻辑判断的方法来操作属性,例如将number的属性值设置为2~100之间的数字,小于2人时计2人,大于100人时计100人,示例代码如下。

源文件:Group.java。具体示例代码如下。

public class Group {

 private int number;

 public void set Number(int s_number) {

  if (s_number > 100) {

   this.number = 100;

  } else if (s_number< 2) {

   this.number = 2;

  } else {

   this.number = s_number;

  }

 }

}