Всем привет. На этапе изучения Java, экспериментирую с коллекциями столкнулся с моментом, был бы признателен, если бы вы подсказали как правильно реализовать идею ниже.
Есть абстрактный класс Shape:
public abstract class Shape {
public abstract double area();
}
Далее есть класс фигуры Circle:
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.pow(this.radius, 2) * Math.PI;
}
@Override
public String toString() {
return "Circle{" +
"radius=" + radius +
'}';
}
}
Далее есть класс фигуры Rectangle:
public class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
@Override
public double area() {
return this.width * this.height;
}
@Override
public String toString() {
return "Rectangle{" +
"width=" + width +
", height=" + height +
'}';
}
}
И, непосредственно, класс Main
public class Main {
public static void main(String[] args) {
ArrayList<Shape> shapesList = new ArrayList<>();
Circle circle = new Circle(10);
Rectangle rectangle = new Rectangle(20, 20);
shapesList.add(circle);
shapesList.add(rectangle);
System.out.println(shapesList);
for (Object shape: shapesList) {
System.out.println(shape.toString());
shape.area(); // ????
}
}
}
Я предположил, очевидно, ошибочно, что в ArrayList так же хранятся и методы каждого объекта. И в цикле хотел вызвать метод area(), который есть у каждого объекта.