设计一个抽象类Shape(图形)包含求面积和周长的area()方法和perimeter()方法以及设置颜色的方法SetColor(),并利用Java多态技术设计其子类Circle(圆形)类和Triangle(三角形)类,并分别实现相应的求面积和求周长的方法。
时间: 2024-11-25 08:15:57 浏览: 8
在Java中,我们可以创建一个抽象类`Shape`来描述所有形状的共同特征,如求面积、周长以及设置颜色。然后,我们可以创建两个具体的子类`Circle`和`Triangle`,分别覆盖抽象类中的方法,以便各自计算特定形状的面积和周长。以下是详细的代码实现:
```java
// 抽象类 Shape
abstract class Shape {
protected String color; // 设置颜色
public Shape(String color) {
this.color = color;
}
// 求面积和周长的抽象方法
abstract double getArea();
abstract double getPerimeter();
// 设置颜色的方法
public void setColor(String color) {
this.color = color;
}
// 输出颜色
@Override
public String toString() {
return "Color: " + color;
}
}
// 圆形类 Circle
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
// 实现 getArea() 和 getPerimeter()
@Override
double getArea() {
return Math.PI * Math.pow(radius, 2);
}
@Override
double getPerimeter() {
return 2 * Math.PI * radius;
}
}
// 三角形类 Triangle
class Triangle extends Shape {
private double a;
private double b;
private double c; // 边长
public Triangle(String color, double a, double b, double c) {
super(color);
this.a = a;
this.b = b;
this.c = c;
}
// 使用海伦公式计算面积
// 需要满足三角形三边的关系:任意两边之和大于第三边
private boolean isValid() {
return a + b > c && a + c > b && b + c > a;
}
// 实现 getArea()
@Override
double getArea() {
if (!isValid()) {
throw new IllegalArgumentException("Invalid triangle sides");
}
double s = (a + b + c) / 2; // 半周长
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
}
// 实现 getPerimeter()
@Override
double getPerimeter() {
return a + b + c;
}
}
// 测试
public class Main {
public static void main(String[] args) {
Circle circle = new Circle("Red", 5);
Triangle triangle = new Triangle("Blue", 3, 4, 5);
System.out.println(circle); // 输出 Circle Color: Red
System.out.println("Circle Area: " + circle.getArea());
System.out.println("Circle Perimeter: " + circle.getPerimeter());
System.out.println(triangle); // 输出 Triangle Color: Blue
System.out.println("Triangle Area: " + triangle.getArea());
System.out.println("Triangle Perimeter: " + triangle.getPerimeter());
}
}
```
在这个例子中,`Circle`和`Triangle`类都实现了`Shape`的抽象方法,并提供了各自特有的计算面积和周长的方式。
阅读全文