Kelas dan Objek · Pelajaran 4 dari 10

Enkapsulasi: private, getter, dan setter

9 menit baca · BelajarCode

Enkapsulasi artinya menyembunyikan detail data di dalam objek dan hanya membuka akses lewat metode. Tujuannya supaya objek selalu dalam keadaan valid. Rekening bank, misalnya, tidak boleh punya saldo negatif.

Pengubah akses di Java
PengubahBisa diakses dari
privateHanya di dalam kelas itu sendiri
tanpa pengubahKelas lain dalam paket yang sama
protectedPaket yang sama dan subkelas
publicDi mana saja
Java
1class Rekening {2    private final String pemilik;3    private long saldo;45    Rekening(String pemilik) {6        this.pemilik = pemilik;7    }89    public String getPemilik() {10        return pemilik;11    }1213    public long getSaldo() {14        return saldo;15    }1617    public boolean setor(long jumlah) {18        if (jumlah <= 0) return false;19        saldo += jumlah;20        return true;21    }2223    public boolean tarik(long jumlah) {24        if (jumlah <= 0 || jumlah > saldo) return false;25        saldo -= jumlah;26        return true;27    }28}2930public class Main {31    public static void main(String[] args) {32        Rekening r = new Rekening("Bima");33        System.out.println("Setor 100000: " + r.setor(100000));34        System.out.println("Tarik 150000: " + r.tarik(150000));35        System.out.println("Setor -5000: " + r.setor(-5000));36        System.out.println("Tarik 40000: " + r.tarik(40000));37        System.out.println(r.getPemilik() + ", saldo Rp" + r.getSaldo());38    }39}
Keluaran
Setor 100000: true
Tarik 150000: false
Setor -5000: false
Tarik 40000: true
Bima, saldo Rp60000
  • Atribut saldo dibuat private, sehingga kode di luar kelas tidak bisa menulis r.saldo = -1000000.
  • Saldo hanya bisa berubah lewat setor dan tarik, yang memeriksa aturannya lebih dulu.
  • Getter seperti getSaldo() membuka akses baca. Tidak ada setter untuk saldo, karena saldo hanya boleh berubah lewat transaksi.
  • final pada pemilik berarti nilainya hanya bisa diisi sekali, di konstruktor.

Jangan otomatis membuat getter dan setter untuk semua atribut

Setter untuk setiap atribut sama saja dengan membuat atribut itu publik. Pikirkan perilaku apa yang masuk akal, misalnya setor dan tarik, lalu sediakan metode untuk perilaku itu.

Cek pemahaman

Kenapa atribut saldo dibuat private?

Latihan

Kelas Suhu

Buat kelas Suhu dengan atribut private celsius. Sediakan konstruktor, getter, metode setCelsius yang menolak nilai di bawah -273.15 (mengembalikan false), dan metode getFahrenheit().

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Java online.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi