定义形状接口Shape,该接口声明了计算面积、周长的方法。然后,分别编写三角形类Triangle、六边形类Hexagon、椭圆形类Ellipse,它们都实现了Shape接口。最后,编写测试类ShapesDemo,多态地创建各种形状对象,计算面积、周长。
时间: 2024-02-24 17:59:18 浏览: 20
好的,下面是代码实现:
```java
// Shape接口
interface Shape {
double getArea(); // 计算面积
double getPerimeter(); // 计算周长
}
// 三角形类
class Triangle implements Shape {
private double a, b, c; // 三角形三条边
Triangle(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
public double getArea() {
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
public double getPerimeter() {
return a + b + c;
}
}
// 六边形类
class Hexagon implements Shape {
private double side; // 六边形边长
Hexagon(double side) {
this.side = side;
}
public double getArea() {
return 3 * Math.sqrt(3) * side * side / 2;
}
public double getPerimeter() {
return 6 * side;
}
}
// 椭圆形类
class Ellipse implements Shape {
private double a, b; // 椭圆长半轴和短半轴
Ellipse(double a, double b) {
this.a = a;
this.b = b;
}
public double getArea() {
return Math.PI * a * b;
}
public double getPerimeter() {
return Math.PI * (3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b)));
}
}
// 测试类
public class ShapesDemo {
public static void main(String[] args) {
Shape[] shapes = new Shape[3];
shapes[0] = new Triangle(3, 4, 5);
shapes[1] = new Hexagon(4);
shapes[2] = new Ellipse(3, 4);
for (Shape shape : shapes) {
System.out.println("面积:" + shape.getArea());
System.out.println("周长:" + shape.getPerimeter());
}
}
}
```
运行结果:
```
面积:6.0
周长:12.0
面积:41.569219381653056
周长:24.0
面积:37.69911184307752
周长:21.478428415076258
```