首页 > 解决方案 > java - 如何使用多态性在java中创建具有不同类型的列表?

问题描述

我有 3 个类 圆形、矩形和方形

我想为上述每个类获取所需的数据并由 user 创建它们。

这意味着用户可以制作任何想要的东西,例如 3 个圆形、2 个矩形和 7 个正方形。它取决于用户的形状数量。

然后我想将它们保存在一个单位列表中并调用我的类方法,它们是calculateAreacalculatePerimeter并用它们的名称显示它们的周长和面积。

我该怎么做?

这些是我的课

圆圈

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;
    }
}

标签: javalistclassooppolymorphism

解决方案


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

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

现在您所有的形状类都将实现上述接口并提供接口方法的实现。在您的情况下,更改所有方法的返回类型。你可以把它加倍。

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());

推荐阅读