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
を定義し、具象クラス Circle
と Rectangle
がそれを拡張しています。各具象クラスでは calculateArea
メソッドをオーバーライドし、ポリモーフィズムを使用してShape
型のリストに異なる形状のインスタンスを追加しています。そして、リスト内の各形状の面積を計算して表示しています。
実行結果:
Area: 78.53981633974483
Area: 24.0
これは、Shape
型のリストに含まれる各要素(Circle
および Rectangle
)の calculateArea
メソッドが正しく呼び出され、それぞれの面積が計算されて表示されていることを示しています。