public class AplikasiPolymorphism {
    public static void main(String[] args) {
        Buku[] rak = {
            new Buku("Panduan Anggota Perpustakaan", "Siti Rahmawati"),
            new BukuFiksi("Laskar Pelangi", "Andrea Hirata", "Roman"),
            new BukuReferensi("KBBI Edisi V", "Badan Pengembangan Bahasa", 5)
        };

        System.out.println("--- kunjungan rak (dynamic dispatch) ---");
        for (Buku buku : rak) {
            System.out.println(buku.deskripsi() + " | pinjam "
                    + buku.durasiPinjamHari() + " hari");
        }

        System.out.println("--- downcast dengan pemeriksaan ---");
        for (Buku buku : rak) {
            if (buku instanceof BukuReferensi) {
                BukuReferensi ref = (BukuReferensi) buku;
                System.out.println(ref.aturanRuangBaca());
            } else {
                System.out.println(buku.getJudul() + " bukan buku referensi");
            }
        }

        System.out.println("--- downcast tanpa pemeriksaan ---");
        try {
            BukuReferensi ref = (BukuReferensi) rak[1];
            System.out.println(ref.aturanRuangBaca());
        } catch (ClassCastException e) {
            System.out.println("Gagal: " + e.getClass().getSimpleName());
        }
    }
}
