两个类的ArrayList

时间:2016-03-28 14:51:57

标签: java arraylist

我有一个名为shape的接口,只有一个方法可以计算出形状的区域。然后我有两个实现形状界面的Shape和Rectangle类。所有类都有适当的setter,getter和calcArea方法。在main中,我有一个ArrayList,它将存储2个矩形和两个圆圈。如何将矩形和圆圈添加到数组中?我试图做shapeArr.并且我的方法不会出现在Rectangle和Circle中。我的代码如下,任何帮助表示赞赏。谢谢!

public interface Shape {
    public double calcArea();
}


public class Circle implements Shape {
    private int radius;
    private double area;

    public Circle() {
        radius = 1;
    }

    public void setRadius(int r){
        radius = r;
    }

    public int getRadius(){
        return radius;
    }

    @Override
    public double calcArea() {
        area = (Math.PI * (Math.pow(radius, 2)));
        return area;
    }
}


public class Rectangle implements Shape{
    private int height;
    private int width;
    public int area;

    public Rectangle(){
        height = 1;
        width = 1;
    }

    public void setHeight(int h){
        height = h;
    }

    public void setWidth(int w){
        width = w;
    }

    public int getHeight(){
        return height;
    }

    public int getWidth(){
        return width;
    }

    @Override
    public double calcArea() {
        area = (height * width);
        return area;
    }
}

import java.util.ArrayList;

public class ShapeDemo {

    public static void main(String[] args) {

        ArrayList<Shape> shapeArr = new ArrayList<Shape>(4);

    }

    public static void displayArea(Shape s) {
        System.out.println("The area of the shape is " + s.calcArea());
    }
}

3 个答案:

答案 0 :(得分:2)

您似乎在努力尝试从属于Shape的{​​{1}}类型中找到方法。但是,您应该在List中查找允许向集合中添加List的方法。您要查找的方法是Shape

List.add()

现在,如果您想计算public static void main(String[] args) { ArrayList<Shape> shapeArr = new ArrayList<Shape>(4); Circle c = new Circle(); c.setRadius(10); Rectangle r = new Rectangle(); r.setHeight(10); r.setWidth(5); shapeArr.add(c); shapeArr.add(r); } 中每个Shape的区域,则只需迭代整个集合并调用List方法:

calcArea()

答案 1 :(得分:1)

您需要将ArrayList中的项目转换回正确的类型以获取额外的字段。

例如

(Circle)shareArr.get(1)

您可以使用instanceof运算符找出它的类型。

for(Shape shape: shapeArr)
{

  if(shape instanceof Circle)
  {
    (Circle)shape.circleMethod();
  }
  //same for Rectangle
  }
}

答案 2 :(得分:0)

由于两个类都实现了相同的接口,因此只需调用add方法就可以将这些对象添加到ArrayList中。之后,可以为ArrayList中的所有元素调用displayArea方法来检查它们的区域。

public static void main(String[] args) {
    ArrayList<Shape> shapeArr = new ArrayList<Shape>(4);
    shapeArr.add(new Circle());
    shapeArr.add(new Rectangle());
    for (Shape s : shapeArr) {
        displayArea(s);
    }
}