11.1 Time

为何要定义新类呢?这样做的一个常见目的是将相关的数据封装到对象中,以便能够将它们视为一个整体。这样我们就可以将对象用作参数和返回值,而不传递和返回多个值。这种设计原则被称为数据封装(data encapsulation)。

前面介绍了两个以这种方式封装数据的类型:PointRectangle。另一个这样的类型是表示时间的 Time,我们将在本章实现它。Time 对象封装的数据为小时、分钟和秒数。因为每个 Time 对象都包含这些数据,所以我们将定义存储它们的属性。

属性也被称为实例变量(instance variable),因为每个实例都包含这些变量,与之相反的是类变量(将在 12.3 节中介绍)。

第一步是判断各个变量应为什么类型。hourminute 显然应为整数,但为了让这个类有趣些,我们将 second 声明为 double 类型。

实例变量是在类定义开头(而不是方法中)声明的。下述代码片段本身就是一个合法的类定义:

  1. public class Time {
  2. private int hour;
  3. private int minute;
  4. private double second;
  5. }

Time 类是公有的,这意味着可在其他类中使用。但这些实例变量是私有的,这意味着只能在 Time 类中访问。如果你试图在其他类中读写它们,那么将导致编译错误。

将实例变量声明为私有的有助于将类隔离开来,避免修改一个类后必须相应地修改其他类;还可让其他程序员在使用你编写的类时,减少需要明白的内容。这种隔离称为信息隐藏(information hiding)。