Java基础篇:为Box类添加一个方法

90 阅读3分钟

尽管创建一个仅包含数据的类是相当不错的事情,但这样的情况很少发生。大部分情况是你将使用方法存取由类定义的实例变量。

事实上,方法定义大多数类的接口。这允许类实现函数可以把内部数据结构的特定布局隐蔽到方法抽象后面。除了定义提供数据的存取的方法,你也可以定义被类的内部自己所使用的方法。

不管怎么说,一个盒子的体积依赖于盒子的大小,这就是我们想到用Box类来计算盒子的体积。为了做到这一点,你必须对Box类增加一个方法,示例如下:

// This program includes a method inside the box class. 
 class Box { 
  double width; 
  double height; 
  double depth; 
  // display volume of a box 
  void volume() { 
  System.out.print("Volume is ");
  System.out.println(width * height * depth); 
} 
} 
 class BoxDemo3 { 
  public static void main(String args[]) { 
   Box mybox1 = new Box(); 
   Box mybox2 = new Box(); 
// assign values to mybox1's instance variables 
   mybox1.width = 10; 
   mybox1.height = 20; 
   mybox1.depth = 15; 
/* assign different values to mybox2's 
instance variables */ 
  mybox2.width = 3; 
  mybox2.height = 6; 
  mybox2.depth = 9; 
  // display volume of first box 
  mybox1.volume(); 
 // display volume of second box 
 mybox2.volume(); 
} 
}

该程序产生的输出如下,与先前版本程序的输出一样。

Volume is 3000.0 
Volume is 162.0 

注意看下面两行程序:

mybox1.volume (); 
mybox2.volume ();

该例的第一行调用mybox1的volume()方法。也就是,它使用对象名加点号运算符调用mybox1对象的volume()方法。

这样,调用mybox1.volume( )显示mybox1 定义的盒子的体积,调用mybox2.volume()将显示mybox2 定义的盒子的体积。每次调用volume(),它都会显示指定对象的体积。

如果你对方法调用的概念比较陌生,下列的讨论将有助于澄清概念。当mybox1.volume ( )被执行时,Java运行系统将程序控制转移到volume( )定义内的代码。当volume( )内的语句执行后,程序控制返回调用者,然后执行程序调用的下一行语句。Java执行方法的过程类似于子程序的运行。

在volume()方法中有一些需要注意的地方:实例变量width,height和depth被直接引用,并没有在它们前面加对象名或点号运算符。当一个方法使用由它的类定义的实例变量时,它可以直接这样做,而不必使用显式的对象引用和使用点号运算符。这是很容易理解的。

一个方法总是被它的类的对象调用。只要这个调用过程一发生,对象就是可见的。因此,在方法中就没有必要二次指定对象了。这意味着,volume()中的width,height和depth已经隐含地引用了调用volume()方法中的这些变量的拷贝。

让我们复习一下:当一个实例变量不是被该实例变量所在类的部分代码访问时,它必须通过该对象加点运算符来访问。但是当一个实例变量被定义该变量的类的代码访问时,该变量可以被直接引用。同样的规则也适用于方法。