2.8 绝知此事要躬行--自己动手定义对象
在本章***一小节中不再给大家介绍更多新的知识,只是通过一个较为全面的实例把前面介绍的内容再复述一遍,好让大家加深一下印象,更深刻地理解一下Java的面向对象编程。为了使用标准的Java语言来向大家呈现这个例子,在下面的例子中不可能避免地会出现还没有讲到的东西。遇到这些不明白的地方,大家不必深究,我们只是想用这个例子来让大家巩固本章中前面讲的知识,所有不明白的地方在后面的章节中都会学到。所谓万事开头难,刚开始知道的东西少,碰到不知道的东西比较多是很正常的现象,希望这不要影响大家学习Java编程的热情与信心!
2.8.1 如何定义一个圆的类
在这个比较综合的例子当中,我们把代码分成两段展现给大家,是为了容易解释。大家要把后面的所有代码按顺序放在一个名为Example2_1.java的文件中。这个文件***还是放在第1章我们作示范的那个目录下面,都放在一起比较方便管理。把后面的代码都输入到Example2_1.java之后,在文件所在目录下执行命令来编译这个Java程序文件:javac Example2_1.java
执行完上面这个命令之后,会在当前目录下产生一个名为Example2_1.class的文件。这个文件就是Java字节码文件,还记得吗?然后再执行这个Java字节码程序:java Example2_1
好的,先来看一下我们的例子中最重要的Circle类的定义吧:/* 装载所必需的程序包 */
import java.lang.*;
import java.io.*;
/* 定义一个表示圆的类 */
class Circle {
/* 类的私有属性 */
private double x; // 圆心的X轴坐标x
private double y; // 圆心的Y轴坐标y
private double radius; // 圆半径:radius
/* 类的公共属性 */
public final doublePI=
3.14159265358979323846264338327950288419716939937510582;
/* 类的私有方法 */
private double distanceX(double x0) {
return x-x0;
}
private double distanceY(double y0) {
return y-y0;
}
/* 类的公共方法 */
public double distanceTo(double x0, double y0) {
return Math.sqrt(distanceX(x0)* distanceX(x0) + distanceY(y0)* distanceY(y0));
}
public boolean inCircle(double x0, double y0) {
// 判断点(x0, y0)是否在圆的内部
return distanceTo(x0, y0)
}
public void moveTo(double x0, double y0) { // 设置圆心位置
x=x0; // 在类定义内部可以直接改变私有属性的值
y=y0;
return;
}
public void getPosition() { // 输出圆心的位置
System.out.println( "x=" + x ); // 在类定义内部可以直接使用私有属性
System.out.println( "y=" + y );
return;
}
public void setRadius(double r) { // 设置圆的半径
rradius= r;
return;
}
public double getRadius() { // 取得圆的半径值
return radius;
}
public double getDiameter () { // 计算圆的直径长度:2*R
return 2*radius;
}
public double getCircumference () { // 计算圆的周长:PI*D
return PI*getDiameter ();
}
public double getArea() { // 计算圆的面积:PI*R*R
return PI*radius*radius;
}
public double getCurvature () { // 计算圆的曲率:1/R
return 1.0/radius;
}
}
看到这么长的程序不要害怕,只是举个例子让大家来感受一下类的各种成员及Java中对象的操作方式,并不是让大家现在就完全弄懂上面的程序。下面简单看一下这个类的定义吧。
在类Circle的定义中,首先是它的一些属性定义。我们定义的是一个圆,它的圆心坐标和半径都是这个圆的一些特性。如前面所述,将这些属性设为私有,不要让它们直接被外界访问或修改属性值。但我们也定义了一个公共的属性,即圆周率的值。将它设为公有,是为了从圆这个对象中可以直接取得圆周率的值。这个值是恒定不变的,所以可以放心地设为公有,好在程序中方便使用。这些只是程序设计上的一些习惯,读者完全可以把它也设成私有,然后再定义一个方法取圆周率的值。
大家可以自己试着改一下,没关系。在这个类的定义中,把属性的定义放在方法定义的前面,这不是习惯问题。在定义任何一个类的时候,都要将类的属性定义放在最前面。具体原因等大家学了第3.3.4小节就清楚啦。现在只是预先给大家一个提示,省得尝试修改下面的示例程序时出现其他的问题。
【责任编辑:book TEL:(010)68476606】
点赞 0