如何在Java中创建具有不同类型的列表?

时间:2019-04-26 05:31:29

标签: java list class polymorphism

我有3个课程 圆形,矩形和正方形

我想为上述每个类提供所需的数据并由用户创建它们,这意味着用户可以 5个矩形,2个正方形,1个圆形或1个矩形,2个正方形,7个圆形或其他 用户创建的次数取决于用户。

然后我想将它们保存在单元列表中,并调用我的类方法 calculateArea calculatePerimeter 并显示周长和面积其中有他们的名字。

我该怎么办?

这是我的课

圆圈

public class Cricle {

    private int radius;

    public Cricle(int radius) {
        this.radius = radius;
    }

    public  double calculateArea()
    {
        return (radius*radius)*Math.PI;
    }
    public double  calculatePerimeter()
    {
        return  (radius*2)*Math.PI;
    }
}

矩形

public class Rectangle {

    private int width;
    private int height;

    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    public int calculateArea() {
        return width*height;
    }

    public int calculatePrimeter() {
        return (width+height)*2;
    }
}

平方

public class Square {
    private int edge;


    public int calculateArea() {
        return edge*edge;
    }

    public int calculatePrimeter() {
        return edge*4;
    }
}

5 个答案:

答案 0 :(得分:3)

创建一个接口,让它调用TwoDimensionalShape并将通用方法放入其中。

public interface TwoDimensionalShape {
   double calculateArea();
   int calculatePrimeter();
}

所有类都实现了此interface

public class Circle implements TwoDimensionalShape {
    //your code 
}

public class Rectangle implements TwoDimensionalShape {
    //your code 
}

public class Square implements TwoDimensionalShape {
    //your code 
}

并创建一个List<TwoDimensionalShape>并将所有这些形状放入此列表中。像

List<TwoDimensionalShape> shapes= new ArrayList<TwoDimensionalShape>();
shapes.add(new Circle(5));
shapes.add(new Rectangle(4,3));
shapes.add(new Square(4));
for (TwoDimensionalShape shape : shapes) {
    System.out.println("Area = " + shape.calculateArea());
    System.out.println("Perimeter = " + shape.calculatePrimeter());
}

答案 1 :(得分:3)

您可以定义一个接口,您所有的类都将实现此接口。 将所有常用方法添加到接口中。

public interface Shapes {
   public double calculateArea();
   public double calculatePrimeter();
}

现在,您所有的shape类都将实现上述接口,并提供接口方法的实现。在您的情况下,请更改所有方法的返回类型。您可以将其保留两倍。

public class Circle implements Shapes{
private int radius;

public Circle (int radius) {
    this.radius = radius;
}

@Override
public double calculateArea() {
    return (radius * radius) * Math.PI;
}

@Override
public double calculatePrimeter() {
    return (radius * 2) * Math.PI;
}
}

public class Rectangle implements Shapes{}
public class Square implements Shapes{}

然后您需要一个列表

static List<Shapes> unitList = new ArrayList<Shapes>();

从用户那里获取输入并添加到上面的列表中。然后只需循环unitList并调用相应的方法

用于计算面积

for (Shapes shape : unitList)
    System.out.println("Area: " + shape.calculateArea());

用于计算周长

for (Shapes shape : unitList)
    System.out.println("Perimeter: " + shape.calculatePrimeter());

答案 2 :(得分:2)

如果您想获得有关Java中多态如何工作的正式参考,请参阅Oracle Java教程的section on Polymorphism,它解释了给定类的变量可以保存其任何子类的值,并且该方法调用了如果存在,则超类变量将在子类中使用实现。

根据您的问题定制本教程中的信息:
List可以视为变量的集合,如先前答案中所述Shape的列表可以包含Shape的任何子类(即Square,{{1} }或Rectangle。在列表元素上调用CirclecalculateArea方法将为该形状调用相应的方法。

答案 3 :(得分:1)

为例如创建接口形状。

public interface Shape {
    int calculateArea();
    int calculatePrimeter();
}

在所有三个类中实现此接口。 单位列表将为List<Shape>,然后您可以调用 calculateArea() calculatePrimeter() 方法,同时遍历列表

答案 4 :(得分:0)

您可以使用继承的概念来做到这一点。例如,创建一个Shape类,然后使其他类继承:

public abstract class Shape {
  public int calculateArea();
}
public class Circle extends Shape {}
public class Square extends Shape {}
public class Rectangle extends Shape {}

然后,您可以使用“形状”列表。

相关问题