Java继承与多态的实验

实验中用两个包,第一个包含有一个接口,里面有计算体积的抽象方法calculateVolume,以及图形,形状的几个类,包含对应方法。另一个包引用第一个包,并构建第一个包中类的对象,在主方法中检测对象的方法正确性。**

注意点
1:子类继承父类时,父类含有有参构造方法,子类中必须对父类的构造方法重写
2 :静态方法中不能出现非静态变量,方法

  1. 设计一个应用程序要求:
    (1)设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成
    员变量x和y,获取和设置x和y值的public方法。
    (2)设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径
    的protected,类型的成员变量r、获取和设置r值的public方法、计算圆面积的一public方法。
    (3)设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的
    protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法。
    (4)建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。
    要求:每个类包含无参数和有参数的构造方法。构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。子类的构造方法调用父类的构造方法,对父类中的成员变量初始化。
  2. 定义一个接口,其中包含一个计算体积的抽象方法calculateVolume(),,设计circle和Rectangle两个类都实现接口中的方法calculateVolume(),分别计算球体和长方体的体积。
  3. 参考教材P133,示例程序C5_20,掌握包的使用方法。

Java继承与多态的实验_第1张图片

package shape;

//构建接口
public interface Shapes {
    //接口中的抽象方法
    abstract double calculateVolume();
}

package shape;
//点类

public class Point extends Object{
    protected  double x = 0;
    protected double y = 0;
    //构造方法
    public Point(double x,double y){
        this.x = x;
        this.y = y;
    }
    //返回坐标
    public  double get_X(){
        return x;
    }
    public double get_Y(){
        return y;
    }
   
}

package shape;
//圆类   继承父类point且重写接口中的抽象方法

public class Circle extends Point implements Shapes{
    protected  double r = 0;

    //重构方法  但是父类的构造方法需要重构
    public Circle (double x,double y,double r){
        super(x,y);//重构父类,但是x,y依然对应的point类的参数,构建Circle时,也隐藏式构建了x,y。
        this.r = r;
    }

    //获取圆半径
    public double get_r(){
        return r;
    }

    //计算圆面积
    public double Area_Circle(){
        return (Math.PI*r*r);
    }

    //计算球体积
    public double calculateVolume(){
        return (3.0/4*Math.PI*r*r*r);
    }
}

package shape;
//圆柱类

public class Cylinder extends Circle implements Shapes{
    protected double h;

    //圆柱的构造方法(包括构建其父亲circle的方法,使用super访问父亲)

    public Cylinder(double x,double y,double r,double h){
        super(x,y,r);
        this.h = h;
    }

    //获取圆柱体的高
    public double get_h(){
        return h;
    }

    //计算圆柱体的体积
    public double calculateVolume(){
        return h*(Math.PI*r*r);
    }
}

在测试包中的测试类中测试
注意:静态方法中不能出现非静态的方法,变量。
对象一定修饰成静态static

package shape_check;

//引入shape包中的内容
import shape.*;
public class check{
    //建立圆的对象及圆柱体的对象
    //******注意一定要将对象修饰为静态,否则main方法中报错(静态中不能出现非静态)***********
    static Circle circle = new Circle(0,0,2);
    static Cylinder cylinder = new Cylinder(1,1,5.1,4.1);

    //开始check
    public static void main(String[] args) {
        System.out.println("***********************************************");
        System.out.println("Circie的圆心坐标:("+circle.get_X()+" , "+circle.get_Y()+")");
        System.out.println("Circle的半径:"+circle.get_r());
        System.out.println("Circle的面积:"+circle.Area_Circle());
        System.out.println("Circle对应球的体积:"+circle.calculateVolume());
        System.out.println("***********************************************");
        System.out.println("Cylinder的底面圆的圆心坐标:("+cylinder.get_X()+" , "+cylinder.get_Y()+")");
        System.out.println("Cylinder的底面半径:"+cylinder.get_r());
        System.out.println("Cylinder的底面面积"+cylinder.Area_Circle());
        System.out.println("Cylinder的体积"+cylinder.calculateVolume());
    }
}

Java继承与多态的实验_第2张图片

你可能感兴趣的:(JavaSE,java)