java - java - 如何使用多态性在java中创建具有不同类型的列表?
问题描述
我有 3 个类 圆形、矩形和方形
我想为上述每个类获取所需的数据并由 user 创建它们。
这意味着用户可以制作任何想要的东西,例如 3 个圆形、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;
}
}
解决方案
你可以定义一个接口,你的所有类都将实现这个接口。将所有常用方法添加到接口中。
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());
推荐阅读
- reactjs - TypeError:无法读取未定义的属性(读取“地图”),以及 React.js 中的多个 API 请求
- excel - 从单元格引用中获取行号
- haskell - 制作在自身上运行其输入的函数时出现无限类型错误
- kubernetes - Argocd 使用高内存的原因
- flutter - 函数不会在 Bonfire 游戏引擎中将变量设置回 false
- swift - 如何在 SwiftUI 中使用 .refreshable 调用 API 并刷新列表
- python - 哪个命令用于从字符串中删除换行符
- java - Android:如何实现 Tik Tok 滑动 ViewPager2 功能?
- r - ggplot2 将我的所有数据点聚集到绘图的一端,在 geom_point() 之后不显示其他组件
- ssh - 尝试配置从 PhpStorm 到 XAMPP-vm MAC OS X 的 SSH 访问