如何设计一个三角形类,其中包含至少一个抽象方法来表示三条边,以及如何通过这些抽象方法实现计算面积和周长的方法?同时,请说明如何创建一个长方形类,它继承自这个三角形类,并利用父类的抽象方法来计算自身的面积和周长?
时间: 2024-11-24 22:43:48 浏览: 3
Java:使用抽象类定义一个“形状类”,能够计算周长和面积。
设计一个三角形类,可以这样进行:
```java
public abstract class Triangle {
private double side1;
private double side2;
private double side3;
public Triangle(double a, double b, double c) {
if (a + b > c && a + c > b && b + c > a) {
side1 = a;
side2 = b;
side3 = c;
} else {
throw new IllegalArgumentException("Invalid triangle sides");
}
}
// 抽象方法,每个具体的三角形子类需要实现
public abstract double getArea();
// 实现计算周长的方法,不需要是抽象的
public double getPerimeter() {
return side1 + side2 + side3;
}
// 具体方法示例:海伦公式计算面积
protected double calculateArea() {
double s = (side1 + side2 + side3) / 2; // 半周长
return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));
}
}
// 长方形类继承自三角形类
class Rectangle extends Triangle {
private double width;
private double height;
public Rectangle(double w, double h) {
super(w, h, 0); // 假设矩形是对边相等的直角三角形
width = w;
height = h;
}
@Override // 实现父类的抽象方法
public double getArea() {
return width * height;
}
// 因为矩形不是三角形,所以不需要覆盖getPerimeter(),直接继承即可
}
```
在这个例子中,`Triangle`是一个抽象类,它包含了三个边的属性和一个计算面积的抽象方法。子类`Rectangle`继承了`Triangle`并实现了`getArea()`方法,因为矩形的面积可以直接用宽度乘以高度计算。对于`getPerimeter()`,由于所有三角形都有明确的周长计算方法,所以在`Rectangle`类中无需覆盖。
阅读全文