我正在创建一个程序来说明抽象类。我被它的逻辑困住了。以下是说明:
编写一个程序来创建一组名为
的对象。对象应为 5 种类型:Solids
、Cubes
、Spheres
、Cones
和Brick
。创建一个名为TCone
Solids
的基类,其中包含以下数据值和功能。固体数据
功能:每个实体应能够计算
和area
、返回体积和面积,以及 打印实体以包括volume
、name
、dimensions
和area
。volume
(让我感到困惑的地方)
创建一个抽象类,命名为
。抽象类Shapes
必须至少有三个抽象函数。在类级别Shapes
添加一个Solids
函数,用于比较子类compareTo
、Cubes
、Spheres
、Cones
和Bricks
中实体的面积。然后使用您的TCones
能力 创建一个类型为compareTo
Solids
的array。然后创建以下实体并将它们存储在数组中。
我不明白如何使 Solids 类成为基类及其子类,但在所有类中使用抽象类中的函数而不扩展它。我已经在网上搜索过,但仍然不明白如何实现它。有人可以解释一下我缺少什么吗?
我尝试使用抽象类作为基类,这可以工作,但它不遵循说明。
“...我不明白如何使 Solids 类成为基类及其子类,但在所有类中使用抽象类中的函数而不扩展它。...”
你需要,它说子类形状。
...子类
、Cubes
、Spheres
、Cones
和Bricks
。 ...TCones
抽象类不需要完全是抽象,可以有实现的方法和分配的字段。
考虑以下固体。
仅实现了 compareTo 方法。
否则,需要子类来实现抽象方法。
abstract class Solids implements Comparable<Solids> {
String name;
double[] dimensions;
abstract double area();
abstract double volume();
abstract String print();
@Override
public int compareTo(Solids o) {
return Double.compare(area(), o.area());
}
}
现在,为每个形状创建一个类。
class Cubes extends Solids {
double a;
Cubes(double a) {
this.a = a;
}
@Override
double area() {
return 6 * a * a;
}
@Override
double volume() {
return a * a * a;
}
@Override
String print() {
return getClass().getSimpleName()
+ ", %,f x %1$,f x %1$,f".formatted(a)
+ ", a=" + area()
+ ", v=" + volume();
}
}
class Spheres extends Solids { }
class Cones extends Solids { }
class Brick extends Solids { }
class TCone extends Solids { }
我找不到“TCone”参考。可能是金字塔?
”...然后使用你的
能力 创建一个类型为compareTo
Solids
的array。然后创建以下实体并将它们存储在数组中。 ...”
我不明白 compareTo 方法在创建 array 中如何发挥作用。
Solids[] solids = {
new Cubes(1.2),
new Spheres(3.4),
new Cones(5.6, 7.8),
new Brick(9, 8.7, 6.5),
new TCone(4.3, 2.1)
};
for (Solids s : solids) System.out.println(s);
输出
Cubes, a=8.639999999999999, v=1.728
Spheres, a=145.26724430199204, v=164.63621020892427
Cones, a=267.44901461173066, v=256.15289860309736
Brick, a=386.70000000000005, v=508.95
TCone, a=122.73321631465778, v=40.6616337154127