您的位置: 网站首页 > 程序开发 > Java程序设计 > 第4章 继承与多态 > 【4.6 上 机 实 验】

4.6 上 机 实 验

 

4.6 

编写一个圆和点的继承实例,点用Point类来实现,成员变量包括xy坐标。圆用Circle类来实现,包括radius半径,而且拥有计算面积的方法。分别创建一个圆和点的实例,并用PointCircle对象来引用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() + "\nc: " + 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);

      }

}