我有一个名为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());
}
}
答案 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);
}
}