NESTED CLASS (KELAS DI DALAM KELAS)
TUJUAN:
Membuat kelas di dalam kelas danpenerapanya dalam aplikasi
TEORI SINGKAT:
Bentuk umum script program adalah sebagai berikut:
class OuterClass{
…..
Class NestedCalss{
….}
}
}
PELAKSANAAN PRAKTIKUM:
Listing program 1. StrukturData.java
public classStrukturData{
//Ciptakan array
private final static int SIZE=15;
private int[] larikBulat=new int[SIZE];
public StrukturData(){
//Isi array dengan nilai bulat urut naik
for (int i=0; i
larikBulat[i]=i;
}
}
public void printGenap(){
//cetak nilai dari indeks genap dari array
InnerIteratorGenap iterator=this.new InnerIteratorGenap();
while (iterator.hasNext()){
System.out.print(iterator.getNext() + ” “);
}
System.out.println();
}
//inner class untukimplementasi pola Iterator
private class InnerIteratorGenap{
//Star mulai dari awal array
private int lanjut=0;
public boolean hasNext(){
//cek apakah elemen sekaranga dalah elemen terakhirarray
return (lanjut<=SIZE-1);
}
public int getNext(){
//ambil nilai dalam indeks genap dari array
int hasil=larikBulat[lanjut];
//teruska ke elemen indeks genap selanjutnya
lanjut +=2;
return hasil;
}
}
public static void main(String[]args){
//isi array dengan nilai bulat urut naik
//dan cetak nilai pada indeks genap
StrukturData sd=new StrukturData();
sd.printGenap();
}
}
Listing di atas adalah contoh sebuahprogram java yang di dalamnya terdapat kelas juga. Ini mengartikan bahwa javaselain memfasilitasi sub program / sub kelas juga memfasilitasinya dengan yanglebih besar lagi yaitu tidak hanya sub kelas tetapi memasilitasi releaseprogram di dalam program. Karena di dalam kelas ini juga terdapat variabel,konstruktor dan method yang berlainan. Jika di dalam java ini ada method di dalammethod maka juga ada kelas di dalam kelas. Adapun listing di atas dapatdijelaskan sebagai berikut:
Kelas luas yang ciciptakan adalah class strukturData yang mempunyaivariabel private bertipe static yaitu SIZE dan private non static bertipelarikBulat. Mempunyai satu konstruktor yang digunakan untuk menentukan isivariabel array yang bernama larikBulat[] dengan angka dari 0 s/d 14.Kemudianada satu buah method yang berfungsi sebagai method pencetak dengan namaprintGenap(). Di dalam method ini terdapat satu fungsi pemanggil yangdiinstanisasi dari kelas inner (nested class) bernama InnerIteratorGenap.
Membuat kelas inner tersebut sama seperti halnya pembuatan kelas-kelasbiasa. Di dalam kelas inner tersebut terdapat variabel lanjut, method hasNext() dengan return value boolean, danmethod getNext() dengan return value integer bernama hasil.
Ternyata method-method inilah yang kemudian dipanggil dengan instaniasiobjek yang diciptakan dari kelas inner yaitu objek iterator. Method hasNext pada inner class dipanggil untukmenentukan suatu syarat while yang menyatakan bahwa apabila fungsi whilebermakna benar maka operasi System.out.print dijalankan. Yang dicetak darimethod ini adalah dari hasil return values method getNext() pula dna tentunyaini harus menggunakan objek iterator yang diisntaniasi oleh kelasInnerIteratorGenap sebagai inner kelas tersebut. Dengan demikian kita dapatmengetahui bahwa method di dalam kelas inner dengan mudahnya dapat kita panggildi dalam kelas luar.
Hasilnya adalah
Menambahkan kelas baru di dalam kelas:
//tambahan kelas static nested class (KELAS DIDALAM KELAS)
staticclass Size{
publicint getSize(){
returnSIZE;
}
}
Menambah statemen penggunaan kelas di dalam kelas tersebut:
public static void main(String[]args){
//isiarray dengan nilai bulat urut naik
//dancetak nilai pada indeks genap
StrukturData2sd=new StrukturData2();
sd.printGenap();
//tambahanuntuk memanggil kelas di dalam kelas
StrukturData2.Sizesd2=new StrukturData2.Size();
System.out.println(sd2.getSize());
}
Hasilnya adalah:
Menghilangkan modifier static pada kelas variabel SIZE
Dari:
private final static int SIZE=15;
Menjadi:
Private final int SIZE=15;
Hasilnya adalah:
E:\Semester 2\Object Oriented Programming1\Modul12-Nested Class\StrukturData2.java:57: non-static variable SIZE cannotbe referenced from a static context
returnSIZE;
^
1 error
Tool completed with exitcode 1
Membuat kelas InnerIteratorGanjil:
public class StrukturData2{
//Ciptakan array
privatefinal static int SIZE=15; //Hilangkan staticnya mejadi:
//privatefinal int SIZE=15; (hasilnya Error)
privateint[] larikBulat=new int[SIZE];
publicStrukturData2(){
//Isiarray dengan nilai bulat urut naik
for(int i=0; i
larikBulat[i]=i;
}
}
publicvoid printGenap(){
//cetaknilai dari indeks genap dari array
InnerIteratorGenapiterator=this.new InnerIteratorGenap();
while(iterator.hasNext()){
System.out.print(iterator.getNext()+ ” “);
}
System.out.println();
}
publicvoid printGanjil(){
//cetaknilai dari indeks ganjil dari array
InnerIteratorGanjiliterator=this.new InnerIteratorGanjil();
while(iterator.hasNext()){
System.out.print(iterator.getNext()+ ” “);
}
System.out.println();
}
//inner class untuk implementasi pola Iterator
privateclass InnerIteratorGenap{
//Starmulai dari awal array
privateint lanjut=0;
publicboolean hasNext(){
//cekapakah elemen sekaranga dalah elemen terakhir array
return(lanjut<=SIZE-1);
}
publicint getNext(){
//ambilnilai dalam indeks genap dari array
inthasil=larikBulat[lanjut];
//teruskake elemen indeks genap selanjutnya
lanjut+=2;
returnhasil;
}
}
//Membuat Kelas InnerIteratorGanjil
privateclass InnerIteratorGanjil{
//Starmulai dari awal array
privateint lanjut=1;
publicboolean hasNext(){
//cekapakah elemen sekarang adalah elemen terakhir array
return(lanjut<=SIZE-1);
}
publicint getNext(){
//ambilnilai dalam indeks ganjil dari array
int hasil=larikBulat[lanjut];
//teruskake elemen indeks ganjil selanjutnya
lanjut+=2;
returnhasil;
}
}
//Membuat Kelas InnerIteratorString
privateclass InnerIteratorString{
//Starmulai dari awal array
privateint lanjut=1;
publicboolean hasNext(){
//cekapakah elemen sekarang adalah elemen terakhir array
return(lanjut<=SIZE-1);
}
publicint getNext(){
//ambilnilai dalam indeks genap dari array
inthasil=larikBulat[lanjut];
//teruskake elemen indeks genap selanjutnya
lanjut+=2;
returnhasil;
}
}
//===================================================
publicstatic void main(String[]args){
//isiarray dengan nilai bulat urut naik
//dancetak nilai pada indeks genap
StrukturData2sd=new StrukturData2();
sd.printGenap();
sd.printGanjil();
//tambahanuntuk memanggil kelas di dalam kelas
StrukturData2.Sizesd2=new StrukturData2.Size();
System.out.println(sd2.getSize());
}
//tambahankelas static nested class (KELAS DI DALAM KELAS)
staticclass Size{
publicint getSize(){
returnSIZE;
}
}
}
Hasilnya adalah:
TUGAS:
public classStrukturDataTugas{
//Ciptakan array
private final static int SIZE=15; //Hilangkan staticnya mejadi:
//private final int SIZE=15; (hasilnya Error)
private static String NAMA[]={“1. Arief”,”2.Satejo”,”3. Muhammad”,”4. Kinady”,”5.Dika”,”6. Arman”,”7. Ari”,”8.Setyo”,”9. Dodik”, “10.Jaka”,”11. Ira”,”12. Asad”,”13.Yandi”,”14. Adek”,”15. Dian”};
private int[] larikBulat=new int[SIZE];
public StrukturDataTugas(){
//Isi array dengan nilai bulat urut naik
for (int i=0; i
larikBulat[i]=i;
}
}
public void printGenap(){
//cetak nilai dari indeks genap dari array
System.out.println(“”);
System.out.println(“Daftar Bilangan Genap dalam ArrayBilangan”);
System.out.println(“===========================================”);
InnerIteratorGenap iterator=this.new InnerIteratorGenap();
while (iterator.hasNext()){
System.out.print(iterator.getNext() + ” “);
}
System.out.println();
}
public void printGanjil(){
//cetak nilai dari indeks ganjil dari array
System.out.println(“”);
System.out.println(“Daftar Bilangan Ganjil dalam ArrayBilangan”);
System.out.println(“===========================================”);
InnerIteratorGanjil iterator=this.newInnerIteratorGanjil();
while (iterator.hasNext()){
System.out.print(iterator.getNext() + “”);
}
System.out.println();
}
public void printNama(){
//cetak nilai dari indeks genap dari array
InnerIteratorNama iterator=this.new InnerIteratorNama();
System.out.println(“”);
System.out.println(“Daftar nama-nama dengan nomorGanjil”);
System.out.println(“=======================================”);
while (iterator.hasNext()){
System.out.println(iterator.getNext() + ” “);
}
System.out.println();
}
//inner class untukimplementasi pola Iterator
private class InnerIteratorGenap{
//Star mulai dari awal array
private int lanjut=0;
public boolean hasNext(){
//cek apakah elemen sekaranga dalah elemen terakhirarray
return (lanjut<=SIZE-1);
}
public int getNext(){
//ambil nilai dalam indeks genap dari array
int hasil=larikBulat[lanjut];
//teruska ke elemen indeks genap selanjutnya
lanjut +=2;
return hasil;
}
}
//Membuat KelasInnerIteratorGanjil
private class InnerIteratorGanjil{
//Star mulai dari awal array
private int lanjut=1;
public boolean hasNext(){
//cek apakah elemen sekarang adalah elemen terakhirarray
return (lanjut<=SIZE-1);
}
public int getNext(){
//ambil nilai dalam indeks ganjil dari array
int hasil=larikBulat[lanjut];
//teruska ke elemen indeks ganjil selanjutnya
lanjut +=2;
return hasil;
}
}
//Membuat KelasInnerIteratorString
private class InnerIteratorString{
//Star mulai dari awal array
private int lanjut=1;
public boolean hasNext(){
//cek apakah elemen sekarang adalah elemen terakhirarray
return (lanjut<=SIZE-1);
}
public int getNext(){
//ambil nilai dalam indeks genap dari array
int hasil=larikBulat[lanjut];
//teruska ke elemen indeks genap selanjutnya
lanjut +=2;
return hasil;
}
}
//inner class untukimplementasi pola Iterator untuk String
private class InnerIteratorNama{
//Star mulai dari awal array
private int lanjut=0;
public boolean hasNext(){
//cek apakah elemen sekarang adalah elemen terakhirarray
return (lanjut<=SIZE-1);
}
public String getNext(){
//ambil nilai dalam indeks genap dari array
String hasil=NAMA[lanjut];
//teruska ke elemen indeks genap selanjutnya
lanjut +=2;
return hasil;
}
}
//===================================================
public static void main(String[]args){
//isi array dengan nilai bulat urut naik
//dan cetak nilai pada indeks genap
StrukturDataTugas sd=new StrukturDataTugas();
sd.printGenap();
sd.printGanjil();
sd.printNama();
System.out.println(“”);
System.out.println(“Banyaknya Data Array : “);
System.out.println(“=======================================”);
//tambahan untuk memanggil kelas di dalam kelas
StrukturData2.Size sd2=new StrukturData2.Size();
System.out.println(sd2.getSize());
}
//tambahan kelas static nested class (KELAS DI DALAM KELAS)
static class Size{
public int getSize(){
return SIZE;
}
}
}
KESIMPULAN:
1. Ketentuan dasar yang berlaku pada variabel, konstruktor danmethod pada program di java berlaku pula pada inner class tersebut, yaitu:
a. Variabel dan method pada kelas luar dapat diakses oleh kelasinner (nested class)
b. Variabel dan method non static tidak dapat diakses oleh innerkelas static namun variabel dan method static dapat diakses oleh kelas nonstatic.
2. Dalam menciptakan objek sama seperti halnya dalam menciptakanobjek pada kelas-kelas biasa.