如何将 sub 类 的对象存储在数组中?

How do I store objects of sub classes in array?

问题是创建两个子 classes 的对象并将它们存储在数组中。 所以我创建了一个抽象的 Super class 并在创建了两个子 classes 之后创建了一个方法区域抽象并在我声明数组的主要方法上实现了该方法并给出了它的值。我是新来的,如果我以错误的方式提问,我很抱歉。 是的,输出应该是两个图形的面积和类型。

package Geometric;

public abstract class GeometricFigure {

    int height;
    int width;
    String type;
    int area;


    public GeometricFigure(int height, int width) {
        //super();
        this.height = height;
        this.width = width;
    }



    public abstract int area();
}

package Geometric;

public class Square extends GeometricFigure {

    public Square(int height, int width) {
        super(height,width);


    }
    public int area(){

        return height * width;

    }

}

package Geometric;

public class Triangle extends GeometricFigure {

    public Triangle(int height, int width) {
        super(height ,width);

    }
    public int area() {
        return (height*width)/2;
    }
}
package Geometric;

public class UseGeometric {

    public static void main(String args[]) {

        GeometricFigure[] usegeometric = { new Square(12, 15), new Triangle(21, 18) };

        for (int i = 0; i < usegeometric.length; i++) {

            System.out.println(usegeometric[i]);
            usegeometric[i].area();

            System.out.println();
        }
    }
}

您已经将两个元素存储在一个数组中,我认为您的问题与这部分更相关:

usegeometric[i].area();

        System.out.println();

你得到了两个元素的面积,但你没有将它分配给一个变量,你也没有对它做任何事情。将这些代码行更改为:

System.out.println("Area: " + usegeometric[i].area());

编辑:

Geometric.Square@19dfb72a Geometric.Triangle@17f6480

这是您可以预期的输出类型,因为您没有覆盖 class 中的 toString 方法。 如果不这样做,它将采用继承的 Object 版本,打印 this information

-- 在您的 Square class 中添加:

public String toString() {
  return "Square - area = " + area();
}

或类似的东西,具体取决于您要打印的内容。 (以及对您的 Triangle class 的类似调整)。 此时,您正在打印 ObjecttoString 版本,因为您没有提供新版本。通过覆盖该方法,您应该在将循环转换为以下内容后获得所需的输出:

for (int i = 0; i < usegeometric.length; i++) {
   System.out.println(usegeometric[i]);
}

println 实际做的不是打印对象本身,而是打印对象的字符串表示形式,它由 toString 方法提供。

public class UseGeometric {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    GeometricFigure[] usegeometric = { new Square(12, 15), new Triangle(21, 18) };

    for (int i = 0; i < usegeometric.length; i++) {


        System.out.println("Area is: " + usegeometric[i].area());

    }
} }