INNER CLASS • Inner Class adalah class (kelas dalam) didalamnya class (kelas luar), class merupakan sebuah kerangka model/blueprint yang digunakan sebagai tempat menaruh atribut seperti variable, method, konstruktor, dll. • Dapat menambahkan sebuah class (kelas dalam) didalam class (kelas luar) atau bisa disebut juga Nested Class, contoh lainnya seperti syntax pengkondisian if, yaitu kita dapat menambahkan if didalam if. • Inner Class atau Class Dalam mempunyai hah akses pada atribut atau method yang berada pada ClassLuar meskipun dalam kondisi modifier private, sebaliknya Class Luar tidak memiliki hak akses pada Class Dalam. Inner Class pada Java • Pada dasarnya Inner Class atau Nested Class digunakan untuk mengelompokan class pada satu tempat serta Menciptkan code yang readable dan maintainable pada java, syntax dasar untuk membuat Inner Class, seperti berikut : class KelasLuar{ //Statement pada Class Luar class KelasDalam{ //Statement pada Class Dalam } } • Karena Inner Class menggunakan Instance dari ClassLuar, maka membernya tidak dapat didekalarasikan dengan static.
Terdapat 2 jenis Inner Class, yaitu non-static dan static
Inner Class non-static • Inner Class adalah class yang tidak berada pada top level atau class yang dideklarasikan didalam class lain(Outer class). untuk mengakses variable atau method pada class luar, kita perlu membuat Instance/Objek Class Luar didalam Inner Class.
• Innerclass memerlukan sebuah Instance/Objek dari ClassLuar untuk
mengakses secara langsung mathod atau variablenya, kemuadian kita Instance Inner Classnya. public class KelasLuar { //Class dalam/Inner Class Pertama private class Mobil{ private String merk = "SUZUKI"; public static void main(String[] args){ //Membuat Instance dari KelasLuar private float kecepatan = 360.0f; KelasLuar outerclass = new KelasLuar(); private void jalankan(){ //Membuat Instance dari KelasDalam (Mobil) System.out.println("Merk Mobil: "+merk); KelasLuar.Mobil data1 = outerclass.new Mobil(); //Membuat Instance dari KelasDalam (Pengguna) System.out.println("Kecepatan Mobil: "+kecepatan); KelasLuar.Pengguna data2 = outerclass.new Pengguna(); } } //Menampilkan Hasil Output System.out.println("===== DATA DARI CLASS MOBIL ========"); data1.jalankan(); System.out.println("===== DATA DARI CLASS PENGGUNA ====="); //Class dalam/Inner Class Kedua data2.identitas(); private class Pengguna{ } private String nama = “Asep"; } private int umur = 19; private void identitas(){ System.out.println("Nama Saya: "+nama); System.out.println("Usia Saya: "+umur); } } Inner Class static • Untuk mengubah Inner Class menjadi static, kita hanya perlu menambahkan kata kunci static di belakang class, Yang membedakan class static dengan non-static adalah pada class static kita tidak perlu Menginstance/Membuat objek dari classLuar terlebih dahulu, Inner Class static hanya perlu membuat instance dari classDalamnya saja. • Inner Class static lebih mudah dan praktis digunakan dibandingkan dengan non-static. //Outer Class/Kelas Luar public class KelasLuar {
public static void main(String[] args){
//Class dalam/Inner Class Static //Membuat Instance dari Kelas Dalam (Programming) private static class Programming{ KelasLuar.Programming MyLanguage = new KelasLuar.Programming(); private String language; private void setLanguage(String language){ //Memasukan Nilai/Value MyLanguage.setLanguage("Java"); this.language = language; } //Menampilkan Hasil Output System.out.println("Saya Sedang Mempelajari: private String getLanguage(){ "+MyLanguage.getLanguage()); return language; } } } } Local Inner Class • Adalah inner class yang dideklarasikan di dalam Method. • Kita dapat mendeklarasikan local class di dalam block(expressions, statement dan yang lainnya). Misalnya kita dapat mendeklarasikan local class dalam method atau body iterasi for dan flow kontrol if public void printOriginalNumber(){ public class DemoLocalClass { System.out.println("Original number : " + phoneNumber1); String format = "[^0-9]"; } public static void validatePhoneNumber(String phoneNumber1){ } final int numberLength = 12; class PhoneNumber{ PhoneNumber myNumber = new PhoneNumber(phoneNumber1); String formatNumber = null; myNumber.printOriginalNumber();
• Mendeklarasikan local class PhoneNumber didalam class method validatePhoneNumber. Kode program diatas akan mengecheck numberPhone berdasarkan format dan length yang telah ditentukan. • Bila numberPhone yang dimasukan sesuai format akan ditampilkan hasilnya, dan sebaliknya bila tidak sesuai format(mengandung karakter ilegal) keluaran yang ditampilkan invalid. Anonymous Non Static Inner Class • Anonymous Class adalah salah satu konsep dari class atau interface pada java, yang digunakan untuk mengdeklarasikan dan menginisialisasi objek dari class lain dalam waktu bersamaan, dengan menggunakan Anonymous Class, kita dapat mempersingkat kode program, Anonymous Class hampir sama dengan Inner Class, hanya saja tidak memiliki nama dan hanya memiliki body. • Dengan menggunakan Class Anonymous, kita tidak perlu menggunakan kata kunci implements untuk menginplementasikan interface pada kelas yang diwariskannya, kita hanya perlu membuat Instance dari class tersebut pada class yang ingin diwariskan. Anonymous inner class • Anonymous inner class adalah suatu inner class yang di deklarasikan tanpa nama kelas. • Suatu anonymous inner class tidak dapat secara bersamaan menjadi subclass dari class yang telah di deklarasikan dan juga sebagai kelas implementasi dari suatu interface. Tujuan utama dari anonymous inner class adalah mengoverride satu atau lebih method dari super classnya atau mengimplement semua method dari suatu interface. contoh • Perlu diketahui, bahwa untuk anonymous class ini mengandung beberapa komponen pendukung. Beberapa komponen pendukung tersebut, yaitu :- Operator new- Nama dari interface atau extends class - Tanda Kurung yang mengandung argument atau yang lainnya. Seperti halnya normal class. Akan tetapi ketika kita menggunakan interface, kita tidak dapat menggunakan constructor. Jadi kita mengosongkan tanda kurung, seperti contoh diatas.-Body • Karena anonymous class ini dideklarasikan dalam sebuah expressi, maka class tersebut menjadi bagian dari statement • Access local variabel berdasarkan scope class yang ditempatinya dan access member dari anonymous classSeperti halnya local class, anonymous class juga dapat capture variabel. Class ini memiliki kesamaan dalam hal access local variabel berdasarkan scope dari class yang ditempatinya, seperti : • Anonymous class dapat mengakses member dari class yang ditempatinya • Anonymous class tidak dapat mengakses local variabel dari scope class yang ditempatinya apabila local variabel tersebut tidak dideklarsikan final atau effectively final • Seperti nested class, dalam deklarasi tipe(variabel) dalam anonymous class dapa sama(shadow) dengan pendeklarasian variabel dalam scope class yang ditempatinya. • Anonymous juga memiliki point-point yang tidak di perbolehkan untuk dilakukan, seperti : • Kita tidak dapat mendeklarasikan static initializer atau member interface dalam anonymous class • Kita dapat mendeklarasikan static member dalam anonymous class apabila dideklarasikan sebagai constant variabel. • Kita juga dapat mendeklarasikan beberapa point dalam anonymous class, seperti : • Fields • extra method • instance initializer • local class • Terpenting, kita tidak dapat mendeklarasikan constructor dalam anonymous class. SOAL • BUAT APLIKASI OOP YANG MENGANDUNG INNER CLASS (Static / non Static/ local / anonymous) • SATU KELOMPOK SATU APLIKASI • Tunjukan bagian mana yang menggandung inner class • NamaKelompok_KLS