1. Geometry与Comparable接口 改写实验4中的抽象类Geometry,让其实现Comparable接口,实现对表面积的排序;在测试类中创建Geometry类型的数组或动态数组,里面有若干个Cuboid、Spheroid和Cone对象,然后利用Arrays.sort或Collections.sort对该Geometry数组或动态数组进行排序;输出排序后Geometry数组。
时间: 2024-02-12 20:05:21 浏览: 79
好的,我来给您解答这个问题。
首先,我们需要在Geometry类的定义中实现Comparable接口,这个接口包含一个compareTo方法,用于比较两个对象的大小。我们可以将Geometry类改写为如下所示:
```java
public abstract class Geometry implements Comparable<Geometry> {
public abstract double getArea();
@Override
public int compareTo(Geometry other) {
if (this.getArea() < other.getArea()) {
return -1;
} else if (this.getArea() > other.getArea()) {
return 1;
} else {
return 0;
}
}
}
```
在这个改写后的Geometry类中,我们实现了Comparable接口,并重写了compareTo方法,用于比较两个Geometry对象的大小。
接下来,在测试类中创建Geometry类型的数组或动态数组,里面有若干个Cuboid、Spheroid和Cone对象。我们可以这样写:
```java
public class GeometryTest {
public static void main(String[] args) {
Geometry[] arr = new Geometry[3];
arr[0] = new Cuboid(1, 2, 3);
arr[1] = new Spheroid(4);
arr[2] = new Cone(5, 6);
Arrays.sort(arr);
for (Geometry g : arr) {
System.out.println("Area: " + g.getArea());
}
}
}
```
在这个测试类中,我们创建了一个包含三个不同类型的Geometry对象的数组,然后使用Arrays.sort进行排序,并输出排序后的Geometry数组。
注意,我们在输出排序后的Geometry数组时,使用了每个对象的getArea方法,这是因为我们在compareTo方法中比较的是Geometry对象的表面积,而表面积的计算是由各个子类实现的,因此我们需要通过各个子类的getArea方法来获取表面积。
阅读全文