如何使用抽象类中的方法而不扩展它[关闭]

问题描述 投票:0回答:1

我正在创建一个程序来说明抽象类。我被它的逻辑困住了。以下是说明:

编写一个程序来创建一组名为

Solids
的对象。对象应为 5 种类型:
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 类成为基类及其子类,但在所有类中使用抽象类中的函数而不扩展它。我已经在网上搜索过,但仍然不明白如何实现它。有人可以解释一下我缺少什么吗?

我尝试使用抽象类作为基类,这可以工作,但它不遵循说明。

java inheritance abstract
1个回答
0
投票

“...我不明白如何使 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
© www.soinside.com 2019 - 2024. All rights reserved.