← Back to list

PBO : ENKAPSULASI DAN AKSES MODIFIER

DASAR TEORI

Adnan Tsaqif · 2026-09-09 04:37 · 0 claps · 6.3 min read
#java #modifier #enkapsulasi
Open on Medium ↗

PBO : ENKAPSULASI DAN AKSES MODIFIER

DASAR TEORI

Enkapsulasi

Enkapsulasi adalah salah satu pilar utama dalam pemrograman berorientasi objek. Enkapsulasi berarti membungkus data (variabel) dan metode (fungsi) dalam satu unit yang disebut objek, di mana detail implementasi disembunyikan dari pengguna luar. Konsep ini juga disebut information hiding karena objek melindungi datanya dari modifikasi langsung dari luar, sehingga hanya dapat diakses melalui metode yang disediakan.

Fungsi Enkapsulasi

  • Keamanan Data: Mencegah perubahan data yang tidak sah. 
  • Kemudahan Pemeliharaan: Memisahkan antarmuka (interface) dari implementasi sehingga perubahan pada kode tidak mempengaruhi pengguna kelas. 
  • Modularitas: Membuat sistem lebih modular, sehingga lebih mudah dikelola dan dipahami.

Contoh penerapan enkapsulasi:

public class kendaraan {
    private String merek;
    private String model;
    private int tahun;

    public kendaraan(String merk, String model, int tahun) {
        this.merek = merek;
        this.model = model;
        this.tahun = tahun;
    }

    public String getMerek() {
        return merek;
    }

    public void setMerek(String merk) {
        this.merek = merk;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getTahun() {
        return tahun;
    }

    public void setTahun(int tahun) {
        this.tahun = tahun;
    }
}

Modifier

Akses modifier adalah mekanisme dalam pemrograman berorientasi objek (PBO) yang digunakan untuk mengontrol visibilitas dan aksesibilitas anggota kelas (seperti variabel dan metode). Dalam Java, terdapat empat jenis akses modifier: private, protected, public, dan default (tanpa keyword). Masing-masing memiliki tingkat kontrol yang berbeda terkait siapa yang dapat mengakses anggota tersebut.

  1. Private Access Modifier Keyword: private Visibilitas: Hanya bisa diakses dari dalam kelas yang mendefinisikannya. Anggota yang dideklarasikan sebagai private tidak dapat diakses langsung dari kelas lain, bahkan jika kelas tersebut berada dalam package yang sama.
  2. Protected Access Modifier Keyword: protected Visibilitas: Anggota yang dideklarasikan sebagai protected dapat diakses oleh: 
  • Kelas yang berada di package yang sama. 
  • Subclass (kelas yang mewarisi) bahkan jika berada di package berbeda.

Manfaat

protected memungkinkan akses lebih luas dalam hierarki kelas (inheritance), tetapi tetap menjaga perlindungan dari akses langsung oleh kelas nonsubclass.

  1. Public Access Modifier Keyword: public Visibilitas: Anggota yang dideklarasikan sebagai public dapat diakses dari mana saja, baik dari kelas yang berada di package yang sama maupun package yang berbeda. Akses ini sangat terbuka.
public class kendaraan {
    private String nama;
    protected int kecepatanMaks; 
    public String JenisMesin;

    public kendaraan(String nama, int kecepatanMaks, String JenisMesin) {
        this.nama = nama;
        this.kecepatanMaks = kecepatanMaks;
        this.JenisMesin = JenisMesin;

    }

    public String getNama() {
        return nama;

    }

    public void setNama(String nama){
        this.nama = nama;
    }

    public void tampilkanInfoKendaraan() {
        System.out.println("Nama Kendaraan: " + nama);
        System.out.println("kecepatan Maksimum: " + kecepatanMaks + "km/h");
        System.out.println("Jenis Mesin: " + JenisMesin);
    }
}

  1. Default (Package-Private) Access Modifier Keyword: Tidak ada (tidak menuliskan keyword apa pun). Visibilitas: Anggota yang dideklarasikan tanpa modifier (default) hanya bisa diakses oleh kelas yang berada dalam package yang sama. Tidak bisa diakses oleh kelas yang berada di luar package, bahkan oleh subclass

Manfaat

Mengamankan anggota kelas untuk digunakan hanya dalam package yang sama, cocok untuk menjaga modularitas.

Praktikum Enkapsulasi

public class kendaraan {
    private String merek;
    private String model;
    private int tahun;

    public kendaraan(String merk, String model, int tahun) {
        this.merek = merek;
        this.model = model;
        this.tahun = tahun;
    }

    public String getMerek() {
        return merek;
    }

    public void setMerek(String merk) {
        this.merek = merk;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getTahun() {
        return tahun;
    }

    public void setTahun(int tahun) {
        this.tahun = tahun;
    }
}

Main Class

public class Praktikum_PBO4 {

    public static void main(String[] args) {
        kendaraan mobil = new kendaraan("Toyota", "Avanza", 2020);

        System.out.println("merek: " + mobil.getMerek());
        System.out.println("model: " + mobil.getModel());
        System.out.println("Tahun: " + mobil.getTahun());

        mobil.setModel("Innova");
        mobil.setTahun(2021);

        System.out.println("model baru: " + mobil.getModel());
        System.out.println("Tahun baru: " + mobil.getTahun());
    }
}

Hasil

Praktikum Modifer

Parent Method

package praktikum4;

public class kendaraan {
    private String nama;
    protected int kecepatanMaks; 
    public String JenisMesin;

    public kendaraan(String nama, int kecepatanMaks, String JenisMesin) {
        this.nama = nama;
        this.kecepatanMaks = kecepatanMaks;
        this.JenisMesin = JenisMesin;

    }

    public String getNama() {
        return nama;

    }

    public void setNama(String nama){
        this.nama = nama;
    }

    public void tampilkanInfoKendaraan() {
        System.out.println("Nama Kendaraan: " + nama);
        System.out.println("kecepatan Maksimum: " + kecepatanMaks + "km/h");
        System.out.println("Jenis Mesin: " + JenisMesin);
    }
}

Child Method

package praktikum4;

/**
 *
 * @author acer
 */
public class Mobil extends kendaraan {
    private int jumlahpintu;

    public Mobil (String nama, int kecepatanMaks, String JenisMesin, int jumlahpintu) {
        super(nama, kecepatanMaks, JenisMesin);
        this.jumlahpintu = jumlahpintu;


    }

    public void tampilkanInfoMobil() {
        System.out.println("Kecepatan Maksimum Mobil: " + kecepatanMaks + "km/h");
        System.out.println("Jumlah pintu: " + jumlahpintu);
    }
}

package praktikum4;

public class Praktikum_PBO4 {
    public static void main(String[] args) {
        // Membuat objek dari class Mobil
        Mobil mobilBaru = new Mobil("Toyota Avanza", 180, "Bensin", 4);

        // Menampilkan info menggunakan method dari class kendaraan (parent)
        System.out.println("--- Info Kendaraan (Parent Method) ---");
        mobilBaru.tampilkanInfoKendaraan();

        System.out.println(); // Baris baru untuk pemisah

        // Menampilkan info menggunakan method dari class Mobil (child)
        System.out.println("--- Info Mobil (Child Method) ---");
        mobilBaru.tampilkanInfoMobil();
    }
}

Hasil

Tugas

Soal 

  1. Buat Kelas Manusia: 
  • Kelas ini memiliki atribut nama, usia, dan pekerjaan. 
  • Gunakan akses modifier yang tepat untuk setiap atribut: 
  • nama harus bersifat private. 
  • usia bersifat protected. 
  • pekerjaan bersifat public. 
  • Buat constructor untuk menginisialisasi atribut nama, usia, dan pekerjaan.
  • Buat metode getter dan setter untuk atribut nama. 
  1. Buat Kelas Pekerja yang Mewarisi Manusia: 
  • Kelas ini harus memiliki atribut tambahan gaji (gunakan akses modifier private). 
  • Buat constructor untuk menginisialisasi atribut nama, usia, pekerjaan, dan gaji. 
  • Buat metode getter dan setter untuk atribut gaji. 
  • Override metode toString() untuk menampilkan semua informasi tentang pekerja, termasuk nama, usia, pekerjaan, dan gaji. 
  1. Buat Kelas Main: 
  • Buat objek dari kelas Pekerja dan inisialisasi dengan nama, usia, pekerjaan, dan gaji. 
  • Tampilkan informasi pekerja dengan menggunakan metode toString(). 
  • Ubah nama pekerja menggunakan metode setter dan tampilkan ulang informasi pekerja. 
  • Coba akses langsung atribut nama, usia, dan gaji dari objek pekerja. Apa yang terjadi? Jelaskan mengapa hal tersebut terjadi.

Praktikum

Class Manusia (Parent Method)

package Tugas4;

public class Manusia {
    private String nama;
    protected int usia;
    public String pekerjaan;

    // Constructor
    public Manusia(String nama, int usia, String pekerjaan) {
        this.nama = nama;
        this.usia = usia;
        this.pekerjaan = pekerjaan;
    }

    // Getter untuk nama
    public String getNama() {
        return nama;
    }

    // Setter untuk nama
    public void setNama(String nama) {
        this.nama = nama;
    }
}

Class Pekerja (Child Method)

package Tugas4;

public class Pekerja extends Manusia {
    private double gaji;

    // Constructor
    public Pekerja(String nama, int usia, String pekerjaan, double gaji) {
        super(nama, usia, pekerjaan);
        this.gaji = gaji;
    }

    // Getter untuk gaji
    public double getGaji() {
        return gaji;
    }

    // Setter untuk gaji
    public void setGaji(double gaji) {
        this.gaji = gaji;
    }

    // Override metode toString()
    @Override
    public String toString() {
        return "Nama: " + getNama() + 
               "\nUsia: " + usia + 
               "\nPekerjaan: " + pekerjaan + 
               "\nGaji: Rp" + gaji;
    }
}

Class Main

package Tugas4;

public class Main {
    public static void main(String[] args) {
        // Buat objek dari kelas Pekerja
        Pekerja pekerja = new Pekerja("Adnan", 19, "bandar mbako", 2000000);

        // Tampilkan informasi pekerja menggunakan metode toString()
        System.out.println("=== Informasi Pekerja ===");
        System.out.println(pekerja.toString());
        System.out.println();

        // Ubah nama pekerja menggunakan metode setter
        pekerja.setNama("Tsaqif");

        // Tampilkan ulang informasi pekerja
        System.out.println("=== Informasi Pekerja Setelah Diubah ===");
        System.out.println(pekerja.toString());
        System.out.println();

        // --- Uji Akses Langsung Atribut ---
        System.out.println("=== Uji Akses Langsung ===");

        // 1. Mencoba akses langsung 'pekerjaan' (public)
        System.out.println("Akses langsung pekerjaan: " + pekerja.pekerjaan); // Berhasil

        // 2. Mencoba akses langsung 'usia' (protected)
        System.out.println("Akses langsung usia: " + pekerja.usia); // Berhasil jika dalam package yang sama

        // 3. Mencoba akses langsung 'nama' (private)
        // System.out.println(pekerja.nama); // ERROR! Tidak bisa dikompilasi

        // 4. Mencoba akses langsung 'gaji' (private)
        // System.out.println(pekerja.gaji); // ERROR! Tidak bisa dikompilasi
    }
}

Hasil Main Java

github : https://github.com/AdnanTIF-0064/Praktikum_PBO/tree/main/praktikumPBO4

Referensi :Imam Adi Nata, M.Kom. Modul 4 : Enkapsulasi dan Akes Modifier


메타데이터
post_id
e818ea68d23e
slug
pbo-enkapsulasi-dan-akses-modifier-e818ea68d23e
url
https://medium.com/@tsaqifadnan/pbo-enkapsulasi-dan-akses-modifier-e818ea68d23e
canonical_url
https://medium.com/@tsaqifadnan/pbo-enkapsulasi-dan-akses-modifier-e818ea68d23e
author_url
https://medium.com/@tsaqifadnan
status
ok
fetched_at
2026-09-10 05:41:31