016 抽象クラス(ポリモーフィズムと抽象クラス) 012 解答例

import java.util.ArrayList;
import java.util.List;

// 抽象クラス Shape
abstract class Shape {
    // 抽象メソッド calculateArea を宣言
    public abstract double calculateArea();
}

// 具象クラス Circle
class Circle extends Shape {
    private double radius;

    // コンストラクタ
    public Circle(double radius) {
        this.radius = radius;
    }

    // calculateArea メソッドのオーバーライド
    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

// 具象クラス Rectangle
class Rectangle extends Shape {
    private double length;
    private double width;

    // コンストラクタ
    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    // calculateArea メソッドのオーバーライド
    @Override
    public double calculateArea() {
        return length * width;
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // Shape 型のリストを作成
        List<Shape> shapes = new ArrayList<>();

        // Circle インスタンスをリストに追加
        shapes.add(new Circle(5.0));

        // Rectangle インスタンスをリストに追加
        shapes.add(new Rectangle(4.0, 6.0));

        // ポリモーフィズムを使用して異なる形状の面積を計算して表示
        for (Shape shape : shapes) {
            System.out.println("Area: " + shape.calculateArea());
        }
    }
}

このコードでは、抽象クラス Shape を定義し、具象クラス CircleRectangle がそれを拡張しています。各具象クラスでは calculateArea メソッドをオーバーライドし、ポリモーフィズムを使用してShape 型のリストに異なる形状のインスタンスを追加しています。そして、リスト内の各形状の面積を計算して表示しています。

実行結果:

Area: 78.53981633974483
Area: 24.0               

これは、Shape 型のリストに含まれる各要素(Circle および Rectangle)の calculateArea メソッドが正しく呼び出され、それぞれの面積が計算されて表示されていることを示しています。

「016 抽象クラス」問題集リスト