编程实现计算矩形、三角形和圆形的周长和面积。要求:
(1) 要求从矩形、三角形和圆形抽象出抽象类GeometricObject。
(2) 绘制UML类图,可以省略set和get方法。
(3) 编写测试类,要求:
- 使用下面的方法头,计算图形数组的总面积和总周长,并返回结果;体会动态绑定和多态的特性。
public static double totalArea(GeometricObject[] object)
public static double totalPerimeter(GeometricObject[] object)
- 在main方法中,创建一个图形数组,在数组中存入一个矩形、三角形(不用判断输入的三条边能否组成三角形)和圆形对象,调用上面的方法,输出所有图形的面积、周长之和。
代码如下:
GeometricObject类:
public abstract class GeometricObject {
public abstract double getArea();
public abstract double getPerimeter();
}
Rectangle类:
public class Rectangle extends GeometricObject {
private double height;
private double width;
public Rectangle(double height, double width) {
this.height = height;
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getArea() {
return height * width;
}
public double getPerimeter() {
return 2 * (height + width);
}
}
Triangle类:
public class Triangle extends GeometricObject {
private double side1;
private double side2;
private double side3;
public Triangle(double side1, double side2, double side3) {
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
public double getSide1() {
return side1;
}
public void setSide1(double side1) {
this.side1 = side1;
}
public double getSide2() {
return side2;
}
public void setSide2(double side2) {
this.side2 = side2;
}
public double getSide3() {
return side3;
}
public void setSide3(double side3) {
this.side3 = side3;
}
public double getArea() {
double s = (side1 + side2 + side3) / 2;
return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));
}
public double getPerimeter() {
return side1 + side2 + side3;
}
}
Circle类:
public class Circle extends GeometricObject {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
测试类:
import java.util.Scanner;
public class oneTest {
public static double totalArea(GeometricObject[] object) {
return object[0].getArea() + object[1].getArea() + object[2].getArea();
}
public static double totalPerimeter(GeometricObject[] object) {
return object[0].getPerimeter() + object[1].getPerimeter() + object[2].getPerimeter();
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
GeometricObject[] object = new GeometricObject[3]; //创建图形数组
System.out.println("请分别输入矩形的长和宽:");
object [0] = new Rectangle(input.nextDouble(), input.nextDouble());
System.out.println("请分别输入三角形的三条边:");
object [1] = new Triangle(input.nextDouble(), input.nextDouble(), input.nextDouble());
System.out.println("请输入圆的半径:");
object [2] = new Circle(input.nextDouble());
System.out.println("三个图形的总面积为:" + totalArea(object));
System.out.println("三个图形的总周长为:" + totalPerimeter(object));
}
}