Java 抽象类与继承训练

版权声明:就是码字也不容易啊 https://blog.csdn.net/qq_40946921/article/details/84497265

(1) 请运用面向对象程序设计思想编写完成几何对象的面积计算程序,

具体要求为:

  • GeometricObject(抽象类)、Circle、Cylinder和Rectangle之间的继承关系如下图所示,

  • 请分按类图分别实现这四个类;
  • 然后编写一测试类GeoAreaSum,在该类中编写一个方法求数组中所有几何对象的面积之和,其方法头为:public static double sumArea(GeometricObject[ ] a),
  • 再在GeoAreaSum的main方法中创建一个包括三个对象(一个半径为5的圆、一个半径为10、高为5的圆柱体和一个宽和高分别为6和8的矩形)的GeometricObject数组,
  • 使用sumArea方法计算出它们的总面积并在屏幕上打印输出。
package geo;
abstract class GeometricObject{
    public abstract double findeArea();
    public abstract double findPerimeter();
}
class Rectangle extends GeometricObject{
    private double w,h;
    public Rectangle(double w,double h){
        this.w=w;this.h=h;
    }
    @Override
    public double findeArea() {
        return w*h;
    }

    @Override
    public double findPerimeter() {
        return (w+h)*2;
    }
}
class Circle extends GeometricObject{
    private double r;
    public Circle(double r){
        this.r=r;
    }
    public double getR(){
        return r;
    }
    @Override
    public double findPerimeter() {
        return Math.PI*r*2;
    }

    @Override
    public double findeArea() {
        return Math.PI*r*r;
    }
}
class Cylinder extends GeometricObject{
    private double r,h;
    public Cylinder(double r,double h){
        this.r=r;
        this.h=h;
    }

    @Override
    public double findeArea() {
        return Math.PI*r*r*h;
    }

    @Override
    public double findPerimeter() {
        return 2*Math.PI*r*r*+2*Math.PI*r*h;
    }
}
public class GeoAreaSum {
    public static double sumArea(GeometricObject[] a){
        double sum=0;
        for(int i=0;i<a.length;i++){
           sum+=a[i].findeArea();
        }
        return sum;
    }
    public static void main(String[] args){
        GeometricObject t[]={new Circle(5),new Cylinder(10,5),new Rectangle(6,8)};
        System.out.println("The sum of area is "+sumArea(t));
    }
}

另请思考如果将Cylinder与GeometricObject的继承关系改成与Cylinder与Circle的继承关系,同时将Cylinder中的私有变量r去掉,Cylinder又该如何编写?

 

package geo;
abstract class GeometricObject{
    public abstract double findeArea();
    public abstract double findPerimeter();
}
class Rectangle extends GeometricObject{
    private double w,h;
    public Rectangle(double w,double h){
        this.w=w;this.h=h;
    }
    @Override
    public double findeArea() {
        return w*h;
    }

    @Override
    public double findPerimeter() {
        return (w+h)*2;
    }
}
class Circle extends GeometricObject{
    private double r;
    public Circle(double r){
        this.r=r;
    }
    public double getR(){
        return r;
    }
    @Override
    public double findPerimeter() {
        return Math.PI*r*2;
    }

    @Override
    public double findeArea() {
        return Math.PI*r*r;
    }
}
class Cylinder extends Circle{
    private double h;
    public Cylinder(double r,double h){
        super(r);
        this.h=h;
    }

    @Override
    public double findeArea() {
        return Math.PI*super.getR()*super.getR()*h;
    }

    @Override
    public double findPerimeter() {
        return 2*Math.PI*super.getR()*super.getR()*+2*Math.PI*super.getR()*h;
    }
}
public class GeoAreaSum {
    public static double sumArea(GeometricObject[] a){
        double sum=0;
        for(int i=0;i<a.length;i++){
           sum+=a[i].findeArea();
        }
        return sum;
    }
    public static void main(String[] args){
        GeometricObject t[]={new Circle(5),new Cylinder(10,5),new Rectangle(6,8)};
        System.out.println("The sum of area is "+sumArea(t));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40946921/article/details/84497265