我有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;
}
}
答案 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
。在列表元素上调用Circle
和calculateArea
方法将为该形状调用相应的方法。
答案 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 {}
然后,您可以使用“形状”列表。