@dc65k

Как правильно вызвать метод у объекта, хранящегося в ArrayList?

Всем привет. На этапе изучения 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(), который есть у каждого объекта.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 2
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
В цикле Object. У него точно нет метода area(). Нужно Object заменить на Shape.
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
1)
for (Shape shape: shapesList) {
 System.out.println(shape.toString());
 shape.area();
}


2)
shapesList.forEach(shape -> shape::area());
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы