为什么我的编程不能识别我的方法?

use*_*491 2 java methods arraylist

我收到一个错误,指出"无法找到方法 - getCenter"但是每当我用"a,b或d"这样的单个对象替换"objects.get(i)"时,它就会发现方法很好.我不明白为什么它无法从ArrayList中找到该方法.

public class TestPoly
{
public static void main (String []args)
{
    ArrayList objects = new ArrayList();

    Circle2 a = new Circle2(33,10,4);
    Cylinder2 b = new Cylinder2(21,15,40,5);
    Oval2 c = new Oval2(3,7,34,10);
    OvalCylinder2 d = new OvalCylinder2(5,11,5,5,7);

    objects.add(a);
    objects.add(b);
    objects.add(c);
    objects.add(d);

    for (int i = 0; i < objects.size(); i++)
    {
        System.out.println("For " + objects.get(i).getClass().getName() + objects.get(i).getCenter());
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Circle2就是这个.

public class Circle2
{
// instance variables 
private int x;
private int y;
private int radius;

/**
 * Constructor for objects of class circle
 */
public Circle2(int p_x, int p_y, int r)
{
    // initialise instance variables
    x = p_x;
    y = p_y;
    radius = r;
}

public int getRadius()
{

    return radius;
}

public String getCenter()
{
    return " the center is at (" + x + "," + y + ")";
}
}
Run Code Online (Sandbox Code Playgroud)

Cylinder2,Oval2和OvalCylinder2都只是Circle2的子类.

Sot*_*lis 5

您尚未为您声明Type参数或Type参数ArrayList,因此默认为Object.Object没有getCenter()方法.

您可以将ArrayList声明更改为:

ArrayList<Circle2> objects = new ArrayList<Circle2>();
Circle2 a = new Circle2(33,10,4);
objects.add(a);
objects.get(0).getCenter();
Run Code Online (Sandbox Code Playgroud)

但它现在只能拿走Circle2物品.