类的简介
下面是一段代表2D空间的点的称为SimplePoint的类的代码:
public class SimplePoint {
public int x = 0;
public int y = 0;
}
这个代码段定义了一个类 - SimplePoint。这个类包含两个整数
成员变量,x和y。x和y的定义前的关键字public意味着任何其它
类都可以访问这两个成员。
可以通过初始化一个类来建立对象。当建立一个新的SimplePoint
对象时,就为对象和它的成员x和y分配了空间。同时,对象内的
x和y被初始化为0,因为这两个成员在定义时被赋值为0。
下面是一个类SimpleRectangle,代表一个2D空间中的矩形:
public class SimpleRectangle {
public int width = 0;
public int height = 0;
public SimplePoint origin = new SimplePoint();
}
这段代码定义了类SimpleRectangle,包含两个整数成员,width
和height。类SimpleRectangle中也包含了另一个成员,origin,它的
数据类型是SimplePoint。类名SimplePoint在变量定义中作为变量
类型出现。在可以用原始数据类型的地方都可以使用类名。
和width是一个整数,height是一个整数一样,origin是一
个SimplePoint。另一方面,SimpleRectangle对象有一个SimplePoint。
当建立新的SimpleRectangle对象时,为对象和它的成员分配空
间,成员按照它们的定义初始化。有趣的是,origin成员初始化
建立了有代码new SimplePoint()的SimplePoint对象:
上图显示了原始数据类型和参考数据类型的区别。width和height
是整数,并且完全包含在SimpleRectangle中。另一方面,origin只
是简单地指向一个SimplePoint对象。
SimplePoint和SimpleRectangle对象是它们的类的实现。这两者都提
供了初始化它们的成员的机制。另外,SimpleRectangle能提供计
算它的面积的方法,而且因为SimpleRectangle创建时建立了一
个SimplePoint,类应该提供当SimpleRectangle清除时SimplePoint也
清除的方式。于是,有一个SimplePoint的新的版本,称为Point,
包含一个可以初始化新的Point的构造函数:
public class Point {
public int x = 0;
public int y = 0;
// a constructor!
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
现在,当你建立一个Point时,可以象下面这样初始化:
new Point(44, 78)
44和78的值被传递给构造函数,然后象下面这样赋值给新的
Point对象的成员x和y:
下面是SimpleRectangle的一个新版本,称为Rectangle,包含四个
构造函数,一个用来“移动”矩形;一个计算矩形的面积;一
个finalize方法清除对象:
public class Rectangle {
public int width = 0;
public int height = 0;
public Point origin;
// four constructors
public Rectangle() {
origin = new Point(0, 0);
}
public Rectangle(Point p) {
origin = p;
}
public Rectangle(int w, int h) {
this(new Point(0, 0), w, h);
}
public Rectangle(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
// a method for moving the rectangle
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
// a method for computing the area
// of the rectangle
public int area() {
return width * height;
}
// clean up!
protected void finalize()
throws Throwable {
origin = null;
super.finalize();
}
}
这四个构造函数允许不同的类型和初始化。可以建立一个新
的Rectangle然后为所有成员提供缺省值,或者创建对象时初始
化origin、width和height的值。