Kelas Dalam Jawa
Kelas Dalam Jawa
Di Jawa, juga dimungkinkan untuk membuat sarang kelas (kelas di dalam kelas). Tujuan dari kelas bersarang adalah untuk mengelompokkan kelas yang dimiliki bersama, yang membuat kode Anda lebih mudah dibaca dan dipelihara.
Untuk mengakses kelas dalam, buat objek kelas luar, lalu buat objek kelas dalam:
Contoh
class OuterClass {
int x = 10;
class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
// Outputs 15 (5 + 10)
Kelas Dalam Pribadi
Tidak seperti kelas "biasa", kelas dalam dapat berupa private
atau protected
. Jika Anda tidak ingin objek luar mengakses kelas dalam, nyatakan kelas sebagai private
:
Contoh
class OuterClass {
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
Jika Anda mencoba mengakses kelas dalam pribadi dari kelas luar, terjadi kesalahan:
Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
Kelas Dalam Statis
Kelas dalam juga dapat berupa static
, yang berarti Anda dapat mengaksesnya tanpa membuat objek dari kelas luar:
Contoh
class OuterClass {
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
// Outputs 5
Catatan: sama seperti static
atribut dan metode, static
kelas dalam tidak memiliki akses ke anggota kelas luar.
Akses Kelas Luar Dari Kelas Dalam
Salah satu keuntungan kelas dalam, adalah mereka dapat mengakses atribut dan metode kelas luar:
Contoh
class OuterClass {
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
// Outputs 10