|
JAVA程序员必读:基础篇(5)---类和继承
|
|
编译:ZSC/太平洋网络学院
|
|
|
5.1.7 理解实例和类成员
类的所有实例共享了一个实例方法的相同实现。AnIntegerNamedX的所有实例共享了x和setX的相同实现。这里注意两个方法x和setX都引用了对象的实例变量x。但是你可能会问“如果AnIntegerNamedX的所有实例共享了x和setX的相同实现,这不会模棱两可吗?”,答案当然是:不是。在实例方法中,实例变量的名字是引用了当前对象的实例变量。因此,在x和setX中x就等价于这个x,不会产生模棱两可的情况。
AnIntegerNamedX外部的对象如果想访问x,必须通过AnIntegerNamedX的一个特定实例来实现。假如下面的代码段是在其它对象的方法中,它包含了两种不同AnIntegerNamedX类型的对象,并且设置x为不同的数值,然后显示出来:
. . .
AnIntegerNamedX myX = new AnIntegerNamedX();
AnIntegerNamedX anotherX = new AnIntegerNamedX();
myX.setX(1);
anotherX.x = 2;
System.out.println("myX.x = " + myX.x());
System.out.println("anotherX.x = " + anotherX.x());
. . .
这里值得注意,代码使用setX来设置myX的x数值,而直接赋值给anotherX.x。不管用哪种方法,代码是操作了两种不同的x的副本:一个是包含在myX对象中,另外一个是包含在anotherX对象中。它们的输出为:
myX.x = 1
anotherX.x = 2
上面的例子说明了类AnIntegerNamedX的每一个实例都有它自己的实例变量x的副本并且每个x都有不同的数值。
当声明一个成员变量的时候,你可以指定变量是一个类变量而不是一个实例变量。相似地,你可以指定一个方法为类方法而不是一个实例方法。第一次调用变量定义的类的时候,系统就会为类变量创建一个副本。类的所有实例共享了类变量的相同副本。类方法只能操作类变量,它们不能访问定义在类中的实例变量。
[上一页] [下一页]
|