编写一个圆和点的继承实例,点用Point类来实现,成员变量包括x和y坐标。圆用Circle类来实现,包括radius半径,而且拥有计算面积的方法。分别创建一个圆和点的实例,并用Point和Circle对象来引用Circle实例,输出测试的结果如图4-8所示。
图4-8 程序运行结果
程序代码如下。
/** Point.java @author ZDS
* 2007-2-18 下午12:44:25 */
package chap04;
/** 点类的定义*/
public class Point {
protected int x, y; // 点的坐标
// 确定point构造函数
public Point() {
setPoint(0, 0);
}
// point构造函数
public Point(int a, int b) {
setPoint(a, b);
}
// 设置点的坐标x 与y 值
public void setPoint(int a, int b) {
x = a;
y = b;
}
// 获得x坐标
public int getX() {
return x;
}
// 获得y 坐标
public int getY() {
return y;
}
// 点的坐标转换成字符串输出
public String toString() {
return "[" + x + ", " + y + "]";
}
}
/** Circle.java @author ZDS
* 2007-2-18 下午12:44:25 */
package chap04;
/** 圆类的定义,继承于点*/
public class Circle extends Point { // 圆类继承点类
protected double radius;
// 确定构造函数
public Circle() {
// 隐含调用父类构造函数
setRadius(0);
}
// 重载的构造函数
public Circle(double r, int a, int b) {
super(a, b); // 调用父类构造函数
setRadius(r);
}
// 定义圆的半径
public void setRadius(double r) {
radius = (r >= 0.0 ? r : 0.0);
}
// 获得圆的半径
public double getRadius() {
return radius;
}
// 圆面积计算
public double area() {
return Math.PI * radius * radius;
}
// 圆的圆心、半径转换成字符串输出的方法
public String toString() {
return "Center = " + "[" + x + ", " + y + "]" + "; Radius = " + radius;
}
}
/** InheritanceTest.java @author ZDS
* 2007-2-18 下午12:44:25 */
packagechap04;
importjava.text.DecimalFormat;
importjavax.swing.JOptionPane;
/** 输出点和圆的继承测试结果*/
publicclass InheritanceTest {
publicstatic void main(String args[]) {
Point pointRef, p;
Circle circleRef, c;
String output;
p = new Point(30, 50);
c = new Circle(2.7, 120, 89);
output = "点p: " + p.toString() + "\n圆c: " + c.toString();
// 使用"is a" 关联到有关的圆
// with a Point reference
pointRef = c; // 圆赋值到点的定义
output += "\n\n使用pointRef(Point)来引用圆c: " + pointRef.toString();
// 使用继承(实例一个父类定义到子类)
// 子类赋值把一个点定义创建圆对象定义
circleRef = (Circle) pointRef;
output += "\n\n使用circleRef(Circle)来引用圆c: " + circleRef.toString();
DecimalFormat precision2 = new DecimalFormat("0.00");
output += "\ncircleRef的面积为: "
+ precision2.format(circleRef.area());
// 将圆定义为点对象后输出
if (p instanceof Circle) {
circleRef = (Circle) p;
output += "\n\n类型转换成功";
} else
output += "\n\np不是一个Circle的实例";
JOptionPane.showMessageDialog(null, output,
"继承示例",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}