class Lingkaran extends Bentuk {
    private final double radius;

    public Lingkaran(double radius) {
        super("Lingkaran");
        this.radius = radius;
    }

    @Override
    public double luas() {
        return Math.PI * radius * radius;
    }

    @Override
    public double keliling() {
        return 2 * Math.PI * radius;
    }
}

class Persegi extends Bentuk {
    private final double sisi;

    public Persegi(double sisi) {
        super("Persegi");
        this.sisi = sisi;
    }

    @Override
    public double luas() {
        return sisi * sisi;
    }

    @Override
    public double keliling() {
        return 4 * sisi;
    }
}

public class BangunDatarAbstrak {
    public static void main(String[] args) {
        // Variabel bertipe Bentuk boleh menampung objek subclass-nya.
        Bentuk[] daftar = { new Lingkaran(7), new Persegi(5) };

        for (Bentuk b : daftar) {
            System.out.println(b.deskripsi());
            System.out.printf("  keliling: %.2f%n", b.keliling());
        }
    }
}
