import java.lang.reflect.*;

public class AksesFieldMethod {
    public static void main(String[] args) throws Exception {
        Dompet dompet = new Dompet("Budi");

        // 1. Baca field private tanpa getter
        Field saldo = Dompet.class.getDeclaredField("saldo");
        saldo.setAccessible(true);
        System.out.println("saldo awal    : " + saldo.getLong(dompet));

        // 2. Ubah field private secara langsung
        saldo.setLong(dompet, 50000);
        System.out.println("saldo baru    : " + saldo.getLong(dompet));
        System.out.println("lewat public  : " + dompet.bacaSaldo());

        // 3. Panggil method private
        Method tambah = Dompet.class.getDeclaredMethod("tambahSaldo", long.class);
        tambah.setAccessible(true);
        tambah.invoke(dompet, 25000);
        System.out.println("setelah invoke: " + dompet);

        // 4. Baca field private bertipe object
        Field pemilik = Dompet.class.getDeclaredField("pemilik");
        pemilik.setAccessible(true);
        System.out.println("pemilik       : " + pemilik.get(dompet));
    }
}
