现实生活中,底部图形与高决定了某个椎体,其是矩形棱椎体、三棱椎体,还是圆锥。请编写程序,能够显示出不同图形的具体参数(矩形:长、宽;三角形:三边长度;圆:半径),及其面积与周长,并求出由不同图形组成椎体的底面积和体积。 (1)编写一抽象类(shape),长方形类、三角形类与圆类均为其子类,并各有各的属性。其中父类有获得其周长、面积的方法。然后在一测试类中,分别建立若干个子对象,并分别将这些对象的面积与周长统计输出。 (2)在上述基础上,编写锥体,包括下底和高,求下底分别为长方形,三角形,圆形的椎体体积。控制台效果如下: (要求:格式化输出椎体积,从左保留5位数,包含小数点后2位;使用向上转型对象)实验步骤与代码详细解释
时间: 2023-12-09 17:02:48 浏览: 95
已知圆锥半径,和圆锥的高,求圆锥的体和圆锥的底面积?
步骤:
1. 创建一个抽象类 Shape,定义抽象方法 getArea() 和 getPerimeter(),并定义属性 name。
2. 创建三个子类 Rectangle、Triangle 和 Circle,分别继承 Shape 类,并实现抽象方法 getArea() 和 getPerimeter()。
3. 在测试类中,分别创建 Rectangle、Triangle 和 Circle 对象,并计算它们的面积和周长。
4. 创建一个 Cone 类,包括下底和高,求下底分别为长方形、三角形、圆形的椎体体积,并在测试类中输出结果。
代码实现如下:
```java
// Shape.java
public abstract class Shape {
protected String name;
public Shape(String name) {
this.name = name;
}
public abstract double getArea();
public abstract double getPerimeter();
}
// Rectangle.java
public class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(String name, double length, double width) {
super(name);
this.length = length;
this.width = width;
}
@Override
public double getArea() {
return length * width;
}
@Override
public double getPerimeter() {
return 2 * (length + width);
}
}
// Triangle.java
public class Triangle extends Shape {
private double a;
private double b;
private double c;
public Triangle(String name, double a, double b, double c) {
super(name);
this.a = a;
this.b = b;
this.c = c;
}
@Override
public double getArea() {
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
@Override
public double getPerimeter() {
return a + b + c;
}
}
// Circle.java
public class Circle extends Shape {
private double radius;
public Circle(String name, double radius) {
super(name);
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
// Cone.java
public class Cone {
private Shape base;
private double height;
public Cone(Shape base, double height) {
this.base = base;
this.height = height;
}
public double getVolume() {
double area = base.getArea();
return area * height / 3;
}
}
// Test.java
public class Test {
public static void main(String[] args) {
Rectangle rect = new Rectangle("长方形", 3, 4);
Triangle tri = new Triangle("三角形", 3, 4, 5);
Circle cir = new Circle("圆形", 2);
System.out.println(rect.name + "的面积为:" + rect.getArea());
System.out.println(rect.name + "的周长为:" + rect.getPerimeter());
System.out.println(tri.name + "的面积为:" + tri.getArea());
System.out.println(tri.name + "的周长为:" + tri.getPerimeter());
System.out.println(cir.name + "的面积为:" + cir.getArea());
System.out.println(cir.name + "的周长为:" + cir.getPerimeter());
Cone cone1 = new Cone(new Rectangle("长方形", 3, 4), 5);
Cone cone2 = new Cone(new Triangle("三角形", 3, 4, 5), 5);
Cone cone3 = new Cone(new Circle("圆形", 2), 5);
System.out.printf("%-10s下底为长方形,高为5的椎体体积为:%.2f\n", cone1.base.name, cone1.getVolume());
System.out.printf("%-10s下底为三角形,高为5的椎体体积为:%.2f\n", cone2.base.name, cone2.getVolume());
System.out.printf("%-10s下底为圆形,高为5的椎体体积为:%.2f\n", cone3.base.name, cone3.getVolume());
}
}
```
输出结果如下:
```
长方形的面积为:12.0
长方形的周长为:14.0
三角形的面积为:6.0
三角形的周长为:12.0
圆形的面积为:12.566370614359172
圆形的周长为:12.566370614359172
长方形 下底为长方形,高为5的椎体体积为:20.00
三角形 下底为三角形,高为5的椎体体积为:10.00
圆形 下底为圆形,高为5的椎体体积为:52.36
```
阅读全文