pada tulisan kali ini, saya akan mencoba menjelaskan tentang Inner Class.
Inner Class adalah suatu Class yang didefinisikan di dalam Class lain. Dengan kata lain, Inner Class adalah anggota (member) dari Class lain, sama halnya seperti variable dan method. Hal ini mengakibatkan instance dari Inner Class dapat mengakses /berbagi dengan instance dari outer Class-nya. Instance dari Inner Class dapat mengakses semua member dari outer Class-nya, bahkan yang private.
Ok, Sekarang saya akan mencoba menjelaskan Inner Class yang regular (Inner Class yang biasa). Regular di sini maksudnya adalah bukan static, method-local, atau anonymous. Coba perhatikan Class berikut:
class MyOuter{
private int x = 7;
class MyInner {
public void seeOuter(){
System.out.println(“Outer x is ” + x);
}
}
}
|
Walaupun variabel x dari class MyOuter adalah private, MyInner tetap bisa mengaksesnya. Ini salah satu kelebihan dari Inner Class.
Ok, pertanyaan pun akan muncul di benak Anda. Bagaimana cara mengaksesMyInner.seeOuter() ? Yang jelas, kita harus menciptakan instance dari MyInner dahulu. Lalu bagaimana melakukan instantiasi MyInner?
Untuk menginstantiasi sebuah Inner Class, kita harus memiliki instance dari outer Class untuk mengikat Inner Class tersebut. Caranya sebagai berikut:
1. Instantiasi Inner Class dari dalam code outer Class
Perhatikan code berikut:
class MyOuter{
private int x = 7;
public void makeInner(){
MyInner in = new MyInner();
In.seeOuter();
}
class MyInner{
public void seeOuter(){
System.out.println(“Outer x is ” + x);
}
}
}
|
Code di atas memperlihatkan salah satu cara melakukan instantiasi Inner Class MyInner dari dalam code MyOuter. Ini bisa berjalan jika instance dari MyOuter sudah tercipta, lalu instance tersebut menginvoke method-nya, yaitu makeInner().
Lalu, bagaimana kalo ingin menciptakan MyInner dari luar code MyOuter?
2. Membuat Inner Class obyek dari luar code instance outer Class-nya
Ok, Coba perhatikan kalimat berikut :
“Untuk menginstantiasi sebuah Inner Class, kita harus memiliki instance dari outer Class untuk mengikat Inner Class tersebut”
Bila diperhatikan lebih seksama, Anda pasti menemukan sebuah implikasi. Implikasinya adalah bahwa kita tidak akan bisa melakukan instantiasi Inner Class di dalam static method dari outer class-nya. Nah, ini dia implikasinya. Akan tetapi, Apakah bisa menciptakan Inner Class dari luar outer class-nya atau di dalam static method outer class-nya? Jawabnya adalah Bisa. Dengan sedikit trik tentunya. Perhatikan code berikut:
class AnotherClass{
public static void main(String[] args){
MyOuter mo = new MyOuter();
MyOuter.MyInner inner = mo.new MyInner();
Inner.seeOuter();
}
}
|
AnotherClass adalah class lain yang tentunya berada dalam satu package dengan OuterClass (karena access modifier OuterClass adalah default). Jika OuterClass public, maka tentu AnotherClass bisa di dalam package mana saja. Atau bisa disingkat sebagai berikut:
class AnotherClass{
public static void main(String[] args){
MyOuter.MyInner inner = new MyOuter().new MyInner();
Inner.seeOuter();
}
}
|
Cukup sederhana kan?
Sekian pembahasan singkat tentang Inner Class kali ini, Bila ada kebingungan atau saran dapat dikirmkan ke email saya di : Sputraaria@yahoo.com