设计一个抽象类Shape(图形)包含求面积和周长的area()方法和perimeter()方法以及设置颜色的方法SetColor(),并利用Java多态技术设计其子类Circle(圆形)类和Triangle(三角形)类,并分别实现相应的求面积和求周长的方法。 实验java
时间: 2024-12-15 07:19:19 浏览: 29
首先,我们需要创建一个抽象类 `Shape`,它包含了公共的 `area()`、`perimeter()` 和 `setColor()` 方法,然后定义两个子类 `Circle` 和 `Triangle` 来继承 `Shape` 并实现各自的特有功能。这里是具体的代码实现:
```java
// 抽象类 Shape
abstract class Shape {
protected String color;
// 设置颜色的方法
public abstract void setColor(String color);
// 求面积和周长的抽象方法
public abstract double area();
public abstract double perimeter();
// 访问器方法,用于获取颜色
public String getColor() {
return color;
}
}
// 子类 Circle 实现圆形
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
// 实现 setColor 和计算面积和周长
@Override
public void setColor(String color) {
super.setColor(color);
}
@Override
public double area() {
return Math.PI * radius * radius;
}
@Override
public double perimeter() {
return 2 * Math.PI * radius;
}
}
// 子类 Triangle 实现三角形
class Triangle extends Shape {
private double sideA, sideB, sideC;
// 为了简化,假设所有三角形都有三边相等,构造函数接收三个边长
public Triangle(double sideA, double sideB, double sideC) {
if (sideA + sideB <= sideC || sideA + sideC <= sideB || sideB + sideC <= sideA) {
throw new IllegalArgumentException("Invalid triangle sides");
}
this.sideA = sideA;
this.sideB = sideB;
this.sideC = sideC;
}
// 实现 setColor 和计算面积和周长
@Override
public void setColor(String color) {
super.setColor(color);
}
@Override
public double area() {
double s = (sideA + sideB + sideC) / 2;
return Math.sqrt(s * (s - sideA) * (s - sideB) * (s - sideC));
}
@Override
public double perimeter() {
return sideA + sideB + sideC;
}
}
// 主程序测试
public class Main {
public static void main(String[] args) {
Shape circle = new Circle(5);
circle.setColor("Red");
System.out.println("Circle area: " + circle.area());
System.out.println("Circle perimeter: " + circle.perimeter());
Shape triangle = new Triangle(3, 4, 5);
triangle.setColor("Blue");
System.out.println("Triangle area: " + triangle.area());
System.out.println("Triangle perimeter: " + triangle.perimeter());
}
}
```
在这个例子中,`Circle` 和 `Triangle` 子类都实现了父类的 `setColor()` 方法,并分别计算了各自的面积和周长。由于 `area()` 和 `perimeter()` 方法在 `Shape` 类中声明为抽象,所以它们必须在子类中被具体实现。
阅读全文