Java实验14 计算多个二维图形的面积之和

本文展示了如何在Java中定义接口Quadrable并实现多个图形类,包括Circle、Rectangle和Triangle,这些类实现了计算面积的方法。通过ShapeUtils类的静态方法,计算ArrayList和数组中图形的面积之和,体现了多态特性。
摘要由CSDN通过智能技术生成

题目类别: 实验


关键字: 接口的定义、接口实现、多态、对象类型转换


内容要求:

假设已经存在如下计算图形面积之和的类 ShapeUtils.java。
在这里插入图片描述
其中:Quadrable 是你需要定义的一个接口,getArea 是该接口中定义的抽象方法。



要求:

定义接口 Quadrable.java

定义多个可计算图形面积的图形类(至少三个:Circle、Rectangle、Triangle)。每个类均需要实现接口 Quadrable,位于 shape 包中。类的其他部分可根据需要设置,如: 定义 Triangle 类的话,可以有表示 3 条边长的数据域。

定义一个 Client 类,其中的 main 方法中建立一个 ArrayList 和一个数组,调用ShapeUtils 类中的两个方法计算面积之和。



实现代码:

Quadrable类:

package action;

/**
 * @author zg
 */
public interface Quadrable {
    /**
     *
     * @return 计算图形的面积
     *
     */
    double getArea();
}


Rectangle类:

package shape;

import action.Quadrable;

/**
 * @author zg
 */
public class Rectangle implements Quadrable {

    private double length;
    private double width;

    public Rectangle() {
        this(0,0);
    }

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    @Override
    public double getArea() {
        return width*length;
    }
}


Triangle类:

package shape;

import action.Quadrable;

/**
 * @author zg
 */
public class Triangle implements Quadrable {
    private double a;
    private double b;
    private double c;

    public Triangle() {
        this(0,0,0);
    }

    public Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public double getA() {
        return a;
    }

    public void setA(double a) {
        this.a = a;
    }

    public double getB() {
        return b;
    }

    public void setB(double b) {
        this.b = b;
    }

    public double getC() {
        return c;
    }

    public void setC(double c) {
        this.c = c;
    }

    @Override
    public double getArea() {
        if(a + b <= c || a + c <= b || b + c <= a){
            return 0;
        }
        //  海伦公式
        double p=(a+b+c)*0.5;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    }
}


Circle类:

package shape;

import action.Quadrable;

/**
 * @author zg
 */
public class Circle implements Quadrable {

    private double radius;

    public Circle() {
        this(0);
    }

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    @Override
    public double getArea() {
        return this.radius*this.radius*Math.PI;
    }
}


ShapeUtils类:

package shape;

import action.Quadrable;

import java.util.ArrayList;

/**
 * @author zg
 */
public class ShapeUtils {

    /**
     *
     * @param array 数组
     * @return 数组中图形的面积之和
     */
    public static double totalArea(Quadrable[] array){
        double result=0.0;
        for (Quadrable shape : array) {
            result+=shape.getArea();
        }
        return result;
    }

    /**
     *
     * @param list ArrayList
     * @return ArrayList中图形的面积之和
     */
    public static double totalArea(ArrayList<Quadrable> list){
        double result=0.0;
        for (Quadrable shape : list) {
            result+=shape.getArea();
        }
        return result;
    }
}


Client类:

package main;

import action.Quadrable;
import shape.Circle;
import shape.Rectangle;
import shape.ShapeUtils;
import shape.Triangle;

import java.util.ArrayList;

/**
 * @author zg
 */
public class Client {
    public static void main(String[] args) {
        ArrayList<Quadrable> shape = new ArrayList<>();
        shape.add(new Rectangle(4,6));
        shape.add(new Triangle(3,4,5));
        shape.add(new Circle(3));

        Quadrable[] shape2=new Quadrable[]{
          new Rectangle(1,2),
          new Triangle(6,8,10),
          new Circle(4)
        };

        System.out.println("ArrayList中图形的面积之和:"+ ShapeUtils.totalArea(shape));
        System.out.println("数组中图形的面积之和:"+ ShapeUtils.totalArea(shape2));
    }
}



在这里插入图片描述

### 回答1: 抽象类可以用来设计计算二维平面图形面积程序。我们可以定义一个抽象类Shape,其中包含一个抽象方法getArea(),用于计算图形面积。然后我们可以定义不同的子类,如Rectangle、Circle、Triangle等,这些子类都继承自Shape类,并实现getArea()方法,以计算不同形状的面积。这样,我们就可以通过调用不同子类的getArea()方法来计算不同形状的面积了。 ### 回答2: 通过抽象类设计,我们可以在程序中定义一个名为"Shape"的抽象类,用于计算二维平面图形面积。首先,我们需要在该抽象类中声明一个抽象方法"calculateArea",用于计算图形面积。 然后,我们可以在该抽象类中创建子类,分别代表不同的二维图形,如"Rectange"、"Circle"、"Triangle"等。这些子类需要继承父类"Shape",并实现父类中的抽象方法"calculateArea"。 在每个子类中,我们可以根据不同的图形特性,重写"calculateArea"方法。例如,对于矩形,我们可以根据矩形的长和宽来计算面积;对于圆形,我们可以根据半径来计算面积;对于三角形,我们可以根据底边和高来计算面积。 最后,我们可以在程序中创建实例对象,利用多态性来调用不同子类中的"calculateArea"方法,从而计算并输出各个图形面积。 总结起来,通过抽象类的设计,我们可以将计算二维平面图形面积程序进行模块化,并可以根据具体图形的特性进行灵活的计算。这样的设计不仅提高了代码的可读性和可维护性,还能够方便地拓展新的图形类。 ### 回答3: 抽象类是一种只能被继承而不能被实例化的类,用于定义一组相关类的共同特征和行为。 为了设计一个计算二维平面图形面积程序,可以使用抽象类设计。首先,我们可以创建一个名为 "Shape" 的抽象类,作为所有图形类的基类。它包含一个抽象的计算面积的方法 "calculateArea",用于计算各种图形面积。 ```java abstract class Shape { public abstract double calculateArea(); } ``` 然后,我们可以创建各种具体的图形类来继承 "Shape" 抽象类,并实现 "calculateArea" 方法以计算每种图形面积。例如,创建一个矩形类 "Rectangle" 和一个圆形类 "Circle": ```java class Rectangle extends Shape { private double width; private double height; public Rectangle(double width, double height) { this.width = width; this.height = height; } public double calculateArea() { return width * height; } } class Circle extends Shape { private double radius; public Circle(double radius) { this.radius = radius; } public double calculateArea() { return Math.PI * radius * radius; } } ``` 以上代码中,矩形类和圆形类都继承了 "Shape" 抽象类,并重写了其中的 "calculateArea" 方法,以返回矩形和圆形的面积。 通过使用抽象类设计,我们可以在程序中使用统一的方式来计算不同图形面积。例如: ```java Shape rectangle = new Rectangle(5, 10); System.out.println("矩形的面积为:" + rectangle.calculateArea()); Shape circle = new Circle(3); System.out.println("圆形的面积为:" + circle.calculateArea()); ``` 以上代码中,创建了一个矩形对象和一个圆形对象,并使用统一的 "calculateArea" 方法计算两个图形面积,并打印输出结果。 通过使用抽象类,可以方便地设计和扩展计算二维平面图形面积程序,同时也使得代码具有良好的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值