1. 定义一个点(Point)类,它包含横坐标x和纵坐标y两个属性,再给Point定义两个构造方法和一个打印点坐标的方法(Show())。 2. 定义一个圆(Circle)类,它继承Point类(它是一个点,圆心(Center)),除此之外,还有属性半径(Radius),再给圆定义2个构造方法、一个打印圆的面积的方法(PrintArea())和一个打印圆中心、半径的方法(Show())。
3. 在记事本编辑如下源程序: class Point{
protected int x; protected int y; Point(){ SetXY(0,0); }
Point(int a,int b) { SetXY(a,b); }
public int GetX() { return x; }
public int GetY() { return y; }
public void SetXY(int a, int b) { x =a; y =b; }
public void Show() { if(this instanceof Circle) System.out.println(\中心: \ else System.out.println(\点: \ } }
class Circle extends Point{ final double PI =3.1415926; protected int Radius; Circle() { Radius =5; }
Circle(Point Center, int Radius) { super(Center.GetX(),Center.GetY()); this.Radius =Radius;
}
public void PrintArea() { double area =PI*Radius*Radius; System.out.println(\ System.out.println(\面积:\ System.out.println(\ }
public void Show() { super.Show(); System.out.println(\半径: \ } }
public class Ex6 {
public static void main(String[] args) { Point center =new Point(2,2); center.Show(); int radius =3; Circle cir1 =new Circle(); cir1.Show(); cir1.PrintArea(); Circle cir4 =new Circle(center,radius); cir4.Show(); cir4.PrintArea(); } }
4. 保存程序Ex6.java,编译运行程序,观察并分析程序的运行结果。
5. 去掉语句“super.Show();”,再看看运行结果。理解程序中多太性的运用。
6. 在语句“SetXY(0,0);”和语句“SetXY(a,b);”添加一条语句“System.out.println(\构造点(\\”,在语句“Radius =5;”和语句“this.Radius =Radius;”添加一条语句“System.out.println(\构造圆(半径: \”,重新编译运行程序,观察并理解所得到的结果,从而理解在继承关系中构造方法的调用过程。
实验四、类的继承
[实验目的]
理解继承的含义、掌握方法的覆盖及super关键字的用法、理解继承层次中类的构造方法的定义方式及调用规则。
[问题描述]
编程定义一个点类Point,一个球类Ball,再定义一个运动的球类MovingBall,该类继承自Ball,编写测试类在main方法中创建相应对象,并调用方法进行测试。
[实验思路]
问题中类的继承关系均已经在题目中说明,在设计每个类时需要考虑该类的属性变量及
方法,同时,在定义子类的过程中,还需要注意可以继承哪些属性变量及方法,然后考虑在子类中是否需要改写方法以及添加新的属性及方法。此外,该问题中,球类可以设置一个Point类型的对象成员变量来表示球的中心点。
[关键步骤]
(1) 定义类Point,为了体现类的封装性,该类的成员域的存取修饰符定义为private,再定义相应的构造方法及方法,主要代码如下所示:
class Point { private double xCoord; private double yCoord; public Point(double x, double y) { xCoord = x; yCoord = y; }
public String toString() { return \ } }
其中,toString方法返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串,结果应该简明易读。
(2) 定义类Ball,该类的属性包括中心点、半径、颜色,主要定义如下: class Ball { private Point center; // 中心点 private double radius; // 半径 private String colour; // 颜色 public Ball(double xValue, double yValue, double r) { center = new Point(xValue, yValue); radius = r; } public Ball(double xValue, double yValue, double r, String c) { this(xValue, yValue, r); // 调用三个参数的构造方法 colour = c; } public String toString() { return \ + Double.toString(radius) + \ } }
(3) 定义类MovingBall,该类作为Ball类的子类,只是新增添了一个属性speed。 class MovingBall extends Ball { private double speed; public MovingBall(double x, double y, double r, String c, double s) { … … //代码省略 } public String toString() {