如何使用Object类型的数组访问java中不同类的方法

时间:2015-04-14 15:45:28

标签: java

以下是代码:

public static void main(String args[])
{
    Circle objCircle = new Circle(5);
    Square objSquare = new Square(5);
    Triangle objTriangle = new Triangle(3, 4);
    Sphere objSphere = new Sphere(5);
    Cube objCube = new Cube(5);
    Tetrahedron objTetra = new Tetrahedron(5);
    Object[] Shape = new Object[5];
    Shape[0] = objCircle;
    Shape[1] = objSquare;
    Shape[2] = objTriangle;
    Shape[3] = objSphere;
    Shape[4] = objCube;
    Shape[5] = objTetra;
    for(int i = 0; i<Shape.length; i++)
    {
       //Problem occured in this section of code
        System.out.println(Shape[i].getArea());
    }
}

}

我有六个不同的类,所有类都有getArray()方法,并定义了自己的类。我想使用Shape数组打印getArray()方法从不同类返回的值。

4 个答案:

答案 0 :(得分:1)

定义如下界面。在Circle,Square ..类中实现此接口。

public interface Shape {

    public Double getArea();
}

然后您可以使用以下不同的类getArea。

Shape [] shape = new Shape [5];
    shape[0] = objCircle;
    shape[1] = objSquare;
    shape[2] = objTriangle;
    shape[3] = objSphere;
    shape[4] = objCube;
    shape[5] = objTetra;
    for(int i = 0; i<Shape.length; i++)
    {
       //Problem occured in this section of code
        System.out.println(Shape[i].getArea());
    }

答案 1 :(得分:0)

使用接口或抽象类并从中扩展所有不同的形状。

public abstract class Shape{
    public abstract SomeType getArray();
}

并使用

Shape[] Shapes

而不是Object[]

答案 2 :(得分:0)

首先你要避免使用Object [] 如果你这样做会发生什么?

 ...
shape[6] = Integer.parseInt(1);
for(int i = 0; i<shape.length; i++)
{
   //Oups a problem will occured here
    System.out.println(shape[i].getArea());
}

通过使用Object [],您没有使用Java类型安全性。每个实例都继承自Java中的Object,这意味着您可以将所有内容放入Array中。

我看到你把一个变量用大写。对于Class,Enum,Interface来说,打破Java约定大写。也许我太正统了:))

您可以执行以下操作:

public abstract Shape {
 public abstract double getArea();
}

public Circle extends Shape {
  public abstract double getArea(){
   //implementation here
  }
}

etc...

取决于您的用例。由于某些情况下的继承权衡,接口可能更合适。

使用形状列表。当您调用List.add方法时,您将确保具有相同的类型。 此外,您可以使用foreach循环

答案 3 :(得分:0)

谢谢大家,我说得对,我发布的答案是我在你的帮助下解决的

public static void main(String args[])
{

    Circle objCircle = new Circle(5);
    Square objSquare = new Square(5);
    Triangle objTriangle = new Triangle(3, 4);
    Sphere objSphere = new Sphere(5);
    Cube objCube = new Cube(5);
    Tetrahedron objTetra = new Tetrahedron(5);
    Shape[] a = new Shape[6];

    a[0] = objCircle;
    a[1] = objSquare;
    a[2] = objTriangle;
    a[3] = objSphere;
    a[4] = objCube;
    a[5] = objTetra;
    for(int i = 0; i<a.length; i++)
    {
        a[i].getArea();
    }


}

}