现实生活中,底部图形与高决定了某个椎体,其是矩形棱椎体、三棱椎体,还是圆锥。请编写程序,能够显示出不同图形的具体参数(矩形:长、宽;三角形:三边长度;圆:半径),及其面积与周长,并求出由不同图形组成椎体的底面积和体积。 (1)编写一抽象类(shape),长方形类、三角形类与圆类均为其子类,并各有各的属性。其中父类有获得其周长、面积的方法。然后在一测试类中,分别建立若干个子对象,并分别将这些对象的面积与周长统计输出。 (2)在上述基础上,编写锥体,包括下底和高,求下底分别为长方形,三角形,圆形的椎体体积。控制台效果如下: (要求:格式化输出椎体积,从左保留5位数,包含小数点后2位;使用向上转型对象)实验小结和实验中的注释
时间: 2023-10-09 11:10:11 浏览: 130
计算机图形学-基于3D图形开发技术
好的,以下是代码实现:
```
//定义一个抽象类,包含获取周长和面积的方法
abstract class Shape {
abstract double getPerimeter();
abstract double getArea();
}
//长方形类,继承自抽象类Shape
class Rectangle extends Shape{
double length;
double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double getPerimeter() {
return 2 * (length + width);
}
public double getArea() {
return length * width;
}
}
//三角形类,继承自抽象类Shape
class Triangle extends Shape{
double a;
double b;
double c;
public Triangle(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
public double getPerimeter() {
return a + b + c;
}
public double getArea() {
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
}
//圆类,继承自抽象类Shape
class Circle extends Shape{
double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getPerimeter() {
return 2 * Math.PI * radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
}
//锥体类,包含下底和高,以及计算体积的方法
class Cone {
Shape base;
double height;
public Cone(Shape base, double height) {
this.base = base;
this.height = height;
}
public double getVolume() {
return base.getArea() * height / 3;
}
}
//测试类,创建各种形状的对象并输出其周长和面积
public class Test {
public static void main(String[] args) {
Rectangle r1 = new Rectangle(5, 8);
System.out.println("长方形1的周长为:" + r1.getPerimeter());
System.out.println("长方形1的面积为:" + r1.getArea());
Rectangle r2 = new Rectangle(3, 4);
System.out.println("长方形2的周长为:" + r2.getPerimeter());
System.out.println("长方形2的面积为:" + r2.getArea());
Triangle t1 = new Triangle(3, 4, 5);
System.out.println("三角形1的周长为:" + t1.getPerimeter());
System.out.println("三角形1的面积为:" + t1.getArea());
Triangle t2 = new Triangle(6, 8, 10);
System.out.println("三角形2的周长为:" + t2.getPerimeter());
System.out.println("三角形2的面积为:" + t2.getArea());
Circle c1 = new Circle(2);
System.out.println("圆1的周长为:" + c1.getPerimeter());
System.out.println("圆1的面积为:" + c1.getArea());
Circle c2 = new Circle(5);
System.out.println("圆2的周长为:" + c2.getPerimeter());
System.out.println("圆2的面积为:" + c2.getArea());
//创建三种不同底面的锥体对象并输出其体积
Cone cone1 = new Cone(r1, 10);
System.out.printf("长方形底的锥体的体积为:%.2f\n", cone1.getVolume());
Cone cone2 = new Cone(t2, 6);
System.out.printf("三角形底的锥体的体积为:%.2f\n", cone2.getVolume());
Cone cone3 = new Cone(c1, 3);
System.out.printf("圆形底的锥体的体积为:%.2f\n", cone3.getVolume());
}
}
```
程序中使用了抽象类Shape,通过继承这个抽象类,每个子类都实现了获取周长和面积的方法。在测试类中,分别创建了长方形、三角形和圆形的对象,并输出其周长和面积。
在锥体类中,包含了下底和高,以及计算体积的方法。在测试类中,创建了三种不同底面的锥体对象,并分别输出其体积。注意,锥体类中的下底使用了向上转型对象,即可以使用长方形、三角形和圆形的对象作为下底。
阅读全文