Memahami Java Access Modifiers: Jenis, Aturan, dan Contoh Praktis
Java Access Modifiers
Tutorial ini menjelajahi access modifiers Java, keempat jenisnya, dan mendemonstrasikan penggunaannya melalui contoh yang jelas.
Apa itu Access Modifiers?
Di Java, access modifiers menentukan visibilitas kelas, antarmuka, variabel, metode, konstruktor, dan anggota data. Misalnya,
class Animal { public void method1() {...} private void method2() {...} }
Pada contoh di atas, method1 adalah public – dapat diakses dari kelas mana pun. method2 adalah private – terbatas pada kelas yang melingkupi.
Kata kunci ini – public dan private – adalah visibility modifiers inti di Java.
Catatan: Metode getter itu sendiri tidak dapat dideklarasikan dengan access modifier.
Jenis Access Modifiers
Sebelum mempelajari modifiers, pastikan Anda memahami paket Java.
Java menawarkan empat visibility modifiers utama:
Modifier
Deskripsi
Default (package-private)
Terlihat hanya dalam paket yang sama.
Private
Terlihat hanya dalam kelas yang mendeklarasikannya.
Protected
Terlihat dalam paket dan pada subclass di paket lain.
Public
Terlihat di mana saja.
Default Access Modifier
Jika tidak ada modifier yang ditentukan, Java menerapkan visibilitas default (package-private). Misalnya:
package defaultPackage; class Logger { void message() { System.out.println("Ini adalah pesan"); } }
Kelas Logger hanya dapat diakses oleh kelas dalam defaultPackage. Menggunakannya dari paket lain akan menghasilkan kesalahan kompilasi.
Private Access Modifier
Mendeklarasikan anggota sebagai private membatasi aksesnya ke kelas yang melingkupi:
class Data { private String name; } public class Main { public static void main(String[] args) { Data d = new Data(); d.name = "Programiz"; // ❌ kesalahan waktu kompilasi } }
Kesalahan terjadi karena name bersifat private terhadap Data. Untuk mengeksposnya dengan aman, sediakan metode accessor:
class Data { private String name; public String getName() { return this.name; } public void setName(String name) { this.name = name; } } public class Main { public static void main(String[] args) { Data d = new Data(); d.setName("Programiz"); System.out.println(d.getName()); } }
Output:
Nama adalah Programiz
Perhatikan bahwa nested classes dapat dideklarasikan private, tetapi top-level classes dan antarmuka tidak dapat.
Catatan: Java tidak mengizinkan top-level classes atau antarmuka untuk private.
Protected Access Modifier
Anggota yang ditandai protected terlihat dalam paket yang sama dan pada subclass di paket lain. Contoh:
class Animal { protected void display() { System.out.println("Saya adalah seekor hewan"); } } class Dog extends Animal { public static void main(String[] args) { Dog dog = new Dog(); dog.display(); // ✅ diizinkan } }
Output:
Saya adalah seekor hewan
Anggota protected tidak dapat dideklarasikan pada top-level classes atau antarmuka.
Catatan: Top-level classes dan antarmuka tidak dapat protected.
Public Access Modifier
Anggota yang dideklarasikan public dapat diakses secara universal:
// Animal.java public class Animal { public int legCount; public void display() { System.out.println("Saya adalah seekor hewan."); System.out.println("Saya memiliki " + legCount + " kaki."); } } // Main.java public class Main { public static void main(String[] args) { Animal animal = new Animal(); animal.legCount = 4; animal.display(); } }
Output:
Saya adalah seekor hewan. Saya memiliki 4 kaki.
Ringkasan: Animal (kelas public), legCount (field public), dan display() (metode public) semuanya dapat diakses dari Main.
Access Modifiers diringkas dalam satu gambar
Access modifiers menjadi dasar enkapsulasi, memungkinkan pengembang untuk mengontrol visibilitas dan melindungi integritas data. Untuk selengkapnya tentang enkapsulasi, lihat Java Encapsulation.