🧬 Inner Class (Class di Dalam Class)
Java memungkinkan kita untuk membuat class di dalam class lain. Ini disebut inner class.
Tujuannya adalah untuk mengelompokkan class yang hanya digunakan di dalam induknya, menjaga struktur kode tetap rapi dan relevan.
🧩 4 Jenis Inner Class di Java
| Jenis |
Penjelasan Singkat |
| Inner Class Biasa |
Class di dalam class |
| Static Nested Class |
Inner class yang bersifat static |
| Local Inner Class |
Class di dalam method |
| Anonymous Inner Class |
Class tanpa nama, langsung digunakan |
1️⃣ Inner Class Biasa
public class Luar {
class Dalam {
void tampil() {
System.out.println("Ini class dalam.");
}
}
void jalan() {
Dalam d = new Dalam();
d.tampil();
}
public static void main(String[] args) {
Luar l = new Luar();
l.jalan();
}
}
````
---
## 2️⃣ Static Nested Class
```java
public class Luar {
static class Dalam {
void tampil() {
System.out.println("Ini static inner class.");
}
}
public static void main(String[] args) {
Luar.Dalam d = new Luar.Dalam();
d.tampil();
}
}
- Bisa dibuat tanpa membuat objek class luar
- Tidak bisa akses anggota non-static dari class luar
3️⃣ Local Inner Class (Dalam Method)
public class Demo {
void tampil() {
class Lokal {
void sapa() {
System.out.println("Halo dari dalam method.");
}
}
Lokal l = new Lokal();
l.sapa();
}
public static void main(String[] args) {
new Demo().tampil();
}
}
4️⃣ Anonymous Inner Class
- Digunakan saat membuat implementasi cepat satu kali pakai
- Sering dipakai pada listener atau callback
interface Sapa {
void ucap();
}
public class Demo {
public static void main(String[] args) {
Sapa s = new Sapa() {
public void ucap() {
System.out.println("Halo dunia!");
}
};
s.ucap();
}
}
📌 Kapan Menggunakan Inner Class?
| Situasi |
Jenis Inner Class yang Cocok |
| Struktur hanya digunakan dalam satu class |
Inner Class biasa |
| Tidak butuh akses luar |
Static Nested Class |
| Hanya dibutuhkan dalam satu method |
Local Inner Class |
| Implementasi cepat (1x pakai) |
Anonymous Inner Class |
public class Form {
private String nama;
class Validator {
boolean isValid() {
return nama != null && !nama.isEmpty();
}
}
public Form(String nama) {
this.nama = nama;
}
public boolean validasi() {
Validator v = new Validator();
return v.isValid();
}
public static void main(String[] args) {
Form f = new Form("Marno");
System.out.println("Valid: " + f.validasi());
}
}
📌 Kesimpulan
| Jenis Inner Class |
Bisa Static? |
Bisa Akses Anggota Luar? |
Digunakan Saat |
| Inner Class |
❌ Tidak |
✅ Ya |
Class bantu untuk outer |
| Static Nested Class |
✅ Ya |
❌ Tidak |
Class mandiri tapi terhubung |
| Local Inner Class |
❌ Tidak |
✅ Ya (jika final) |
Di dalam method |
| Anonymous Inner Class |
❌ Tidak |
✅ Ya |
Callback, event listener |
➡️ Selanjutnya: Level Mahir atau Framework Java