定义一个形状的抽象类(Shape),设计“矩形”、“三角形(等腰)”、“正方形”,“圆”等 类,并实现 Shape 的抽象方法,分别计算相应形状的面积和周长
时间: 2024-10-17 18:00:34 浏览: 27
在面向对象编程中,我们可以创建一个抽象类 `Shape` 来定义所有形状的基本属性和行为。抽象类通常包含一些抽象方法,即无实现的公共方法,它的子类需要提供具体的实现。以下是一个简单的示例,展示了如何在 Java 中定义这些类:
```java
// 抽象Shape 类
public abstract class Shape {
protected double sideLength; // 矩形和正方形的边长,圆的半径
public Shape(double sideLength) {
this.sideLength = sideLength;
}
// 抽象方法,计算面积
public abstract double getArea();
// 抽象方法,计算周长
public abstract double getPerimeter();
}
// 具体实现的子类 - 矩形
public class Rectangle extends Shape {
public Rectangle(double length, double width) {
super(length + width); // 矩形周长等于两个长度加两个宽度
}
@Override
public double getArea() {
return sideLength * sideLength;
}
@Override
public double getPerimeter() {
return 2 * sideLength;
}
}
// 具体实现的子类 - 等腰三角形
public class IsoscelesTriangle extends Shape {
private double base;
public IsoscelesTriangle(double base, double height) {
super(Math.sqrt(height * height / 2)); // 计算等腰三角形的半高,因为底*高/2 = 半径^2
this.base = base;
}
@Override
public double getArea() {
return 0.5 * base * sideLength;
}
@Override
public double getPerimeter() {
return base + 2 * sideLength;
}
}
// 具体实现的子类 - 正方形
public class Square extends Shape {
public Square(double side) {
super(side);
}
@Override
public double getArea() {
return sideLength * sideLength;
}
@Override
public double getPerimeter() {
return 4 * sideLength;
}
}
// 具体实现的子类 - 圆
public class Circle extends Shape {
public Circle(double radius) {
super(radius);
}
@Override
public double getArea() {
return Math.PI * sideLength * sideLength;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * sideLength;
}
}
阅读全文