class MesinBensin {
    public void nyalakan() {
        System.out.println("Mesin bensin menyala, idle 800 rpm");
    }

    public int rpmMaksimum() {
        return 6000;
    }
}

class MesinListrik {
    public void nyalakan() {
        System.out.println("Mesin listrik siap, senyap");
    }

    public int dayaKwh() {
        return 60;
    }
}

// Versi pewarisan yang keliru: MobilBensin "adalah" MesinBensin.
// Satu-satunya slot extends terpakai untuk mesin.
class MobilBensin extends MesinBensin {
    private final String pemilik;

    public MobilBensin(String pemilik) {
        this.pemilik = pemilik;
    }

    public void berangkat() {
        System.out.print(pemilik + ": ");
        nyalakan(); // method warisan dari MesinBensin
        System.out.println("  rpm maksimum: " + rpmMaksimum());
    }
}

// MobilListrik juga ingin jadi Mobil, tetapi slot extends sudah
// dipakai MesinListrik — perilaku berangkat() terpaksa ditulis ulang.
class MobilListrik extends MesinListrik {
    private final String pemilik;

    public MobilListrik(String pemilik) {
        this.pemilik = pemilik;
    }

    public void berangkat() {
        System.out.print(pemilik + ": ");
        nyalakan();
        System.out.println("  daya: " + dayaKwh() + " kWh");
    }
}

public class MobilPewarisan {
    public static void main(String[] args) {
        new MobilBensin("Budi").berangkat();
        new MobilListrik("Siti").berangkat();
    }
}
