3.请配合Pillar类,在启动类中分别计算圆柱体,三棱体,长方体的体积,体验基于继承的对象向上转型而实现的面向对象程序设计思想的多态性的概述与应用。
时间: 2024-11-23 14:38:45 浏览: 18
面向对象程序设计(C++) 编程作业 八道题
在面向对象编程中,多态性允许我们通过共享的接口或基类处理不同类型的对象,使得代码更加通用和易于维护。例如,我们可以创建一个名为`Shape`的基类,它有一个计算体积的方法`calculateVolume()`,然后派生出三个子类:`Cylinder`, `Prism`, 和 `Cube`,每个子类都重写了这个方法以计算各自特定形状的体积。
首先,我们需要定义`Pillar`类作为基础,并让它能够包含一个`Shape`类型的实例:
```java
public class Pillar {
protected Shape shape;
public Pillar(Shape shape) {
this.shape = shape;
}
public void setShape(Shape newShape) {
this.shape = newShape;
}
// 使用多态调用shape的calculateVolume()方法
public double getVolume() {
return shape.calculateVolume();
}
}
```
接下来,我们会定义`Cylinder`, `Prism`, 和 `Cube` 类,它们都从`Shape`类继承并实现各自的体积计算方法:
```java
public abstract class Shape {
// 抽象方法,子类需要实现
public abstract double calculateVolume();
}
public class Cylinder extends Shape {
private double radius;
private double height;
// ... 实现calculateVolume()方法
}
public class Prism extends Shape {
private double baseArea;
private double height;
// ... 实现calculateVolume()方法,如对于底面是一个正方形的情况
}
public class Cube extends Shape {
private double sideLength;
// ... 实现calculateVolume()方法,立方体体积等于边长三次方
}
```
现在,我们可以创建`Pillar`对象,并根据不同形状创建相应的`Shape`实例:
```java
public static void main(String[] args) {
Pillar pillar = new Pillar(new Cylinder(5, 10)); // 圆柱形
System.out.println("Cylinder volume: " + pillar.getVolume());
pillar.setShape(new Prism(4, 6)); // 三棱柱
System.out.println("Prism volume: " + pillar.getVolume());
pillar.setShape(new Cube(3)); // 长方体
System.out.println("Cube volume: " + pillar.getVolume());
阅读全文