Inner Class adalah class yang berada (didefinisikan) di dalam sebuah Class

dokumen-dokumen yang mirip
Pemrograman Lanjut. Interface

Pemrograman Web. Object Oriented Programming in PHP 5

Konsep Dasar Pemrograman Berorientasi Objek

1. Manakah jawaban yang benar,pada saat Anda mengcompile dan menjalankan class berikut ini:

1. Keyword mana yang memiliki fungsi sama dengan keyword this dan menyediakan reference ke atribut turunan dari objek? super

ABSTRACT CLASS. Imam Fahrur Rozi

Apa yang menjadi output potongan kode diatas? Error karena tidak ada String yang di-passing kedalam konstruktor Bapak

(INHERITANCE) Nurochman

Pemrograman Berorientasi. Inheritance

Pemrograman Lanjut. Class : Deeper Look 2

KONSEP OOP: POLYMORPHISM

Inheritance dan Kata Kunci static

KONSEP OOP: POLYMORPHISM

Object Oriented Programming (OOP) --Polimorphisme-- Saniati STMIK Teknokrat, Bandar Lampung

Inheritance (Pewarisan) Pengertian dasar inheritance

Encapsulation (Encapsulasi) Minggu 5 Pemrograman Berorientasi Objek Alfa Faridh Suni

Object Oriented Programming (OOP) --Inheritance- Saniati STMIK Teknokrat, Bandar Lampung

IKG2I4 / Software Project I

Struktur Class Lanjutan

KARAKTERISTIK PEMROGRAMAN BERORIENTASI OBJEK (OOP) Pemrograman berorientasi Objek mempunyai karakterisitik sebagai berikut:

Konsep Pemrograman Berbasis Obyek

Object Oriented Programming (Class, Inheritance, Encapsulation dan Interface)

CSG2H3 Object Oriented Programming INTERFACE -RSM-

Polymorphism (Polimorfisme)

Keyword this untuk memanggil private String pengarang; private String judul;

3/31/2011. Tujuan. Inheritance, Polymorphism,& Interfaces. Inheritance / pewarisan. Inheritance / pewarisan. Inheritance / pewarisan

ABSTRACTION, ENCAPSULATION, INHERITANCE & POLYMORPHISM

IKG2I4 / Software Project I

KONSEP OOP: PEWARISAN / INHERITANCE

subclass class manapun private default protected public package yang sama

MATERI 3a Pemrograman Berorientasi Objek (S3)

Pemrograman Berorientasi. Abstract & Interface

Polymorphism. Materi ke-8 Pemrograman Berbasis Objek

Modul Bahasa Pemrograman 1

Java Operators. Nurochman

Rahasia Cermat & Mahir Menguasai Akuntansi Keuangan Menengah (Indonesian Edition)

PEMROGRAMAN JAVA. Yoannita, S.Kom. Class & Method sederhana Konsep Pemrograman Berorientasi Objek. Company LOGO

Bahasa Pemrograman 2.

MODUL 3. Inheritance, Abstract Class, Interface TUJUAN PRAKTIKUM LANDASAN TEORI. A. Inheritance

Pemrograman Berorientasi Objek / Object Oriented Programming / (OOP) Nur Hasanah, M.Cs

Pemrograman Berorientasi. Class dan Obyek 2

1. Mana diantara pilihan-pilihan berikut ini yang merupakan penulisan loop yang benar?

CSG2H3 Object Oriented Programming. Inheritance -RSM-

PRAKTIKUM 6 EXCEPTION

Method yang ada pada parent class(superclass) didefinisikan kembali oleh kelas anaknya (subclass).

ABSTRACT CLASS DAN INTERFACE

IKG2I4 / Software Project I

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

MODUL 3 PEWARISAN TUJUAN DASAR TEORI

ANALISIS CAPAIAN OPTIMASI NILAI SUKU BUNGA BANK SENTRAL INDONESIA: SUATU PENGENALAN METODE BARU DALAM MENGANALISIS 47 VARIABEL EKONOMI UNTU

Pemrograman Lanjut. Instance Variable Access Modifier Set dan Get Method

POLIMORPHISM PEMROGRAMAN LANJUT. Dr. Eng. Herman Tolle. Sistem Informasi FILKOM UB Semester Genap 2016/2017

public class B extends A {... }

BAB VIII CLASS ABSTRACT & CLASS INTERFACE. //abstract class bisa, kelas biasa bisa System.out.println("Ini nama");

Covered Topics. Course Map OOP Concept

Pertemuan 4 Halaman 1/1. Class Inheritance

Pemrograman Berorientasi Object. IMade Suartana, S.Kom, M.Kom

C#, Programming, Object-oriented. Pengenalan C# Erick Pranata. Edisi I

Bahasa Pemrograman 2.

06/03/2018. Tidak memiliki parameter. Melakukan inisialisasi semua variabel private dengan nilai awal.

Pemrograman Berbasis Objek. Interface. Politeknik Elektronika Negeri Surabaya

Pemograman Berorientasi Objek. Week 3 Abstrak dan Interface dalam suatu kelas

Pemrograman Berbasis Objek (Polimorfisme)

PEWARISAN. Disusun Oleh: Reza Budiawan. Untuk: Tim Dosen Algoritma & Pemrograman Lanjut

Class & Object 2 ~Praktikum~ Imam Fahrur Rozi

KESASTRAAN MELAYU TIONGHOA DAN KEBANGSAAN INDONESIA: JILID 2 FROM KPG (KEPUSTAKAAN POPULER GRAMEDIA)

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PENGENALAN OBJECT ORIENTED PROGRAMMING

INHERITANCE AND POLIMORPHISM PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM

Pertemuan 2 (2) : Membuat Class dan mengakses Anggota Class

Dasar Pemrograman Java. H. Risdiandri Iskandar, SKom,MM 1

Gambar 1: Hirarki class

2 TIPE DATA DAN VARIABEL

Percobaan 6 Exception

OBJECT, CLASS DAN METHOD. 1. Mengetahui pengertian dari objek & class 2. Dapat membuat program sederhana dari java dengan menggunakna objek dan class

Pemrograman Berbasis. Strategy dan Observer Pattern

Praktikum. PBO (Kelas K) Oleh : MOHAMMAD SHOLIKIN

9/26/2011. Tujuan. Bekerja dengan Java Class Library. Pengenalan OOP. Pengenalan OOP. Class dan Object. Enkapsulasi

[Lanjutan] Nurochman

PERCOBAAN 6 EXCEPTION

Percabangan & Perulangan

BAHASA PEMROGRAMAN JAVA

KONSEP OOP: PEWARISAN / INHERITANCE

1/5. while and do Loops The remaining types of loops are while and do. As with for loops, while and do loops Praktikum Alpro Modul 3.

Java Fundamentals. Herman Tolle. Program Teknologi Informasi & Ilmu Komputer UNIVERSITAS BRAWIJAYA

PEMROGRAMAN JAVA. Yoannita. Konsep Pemrograman Berorientasi Objek. Company LOGO

Praktikum 4 Konsep Inheritance, Polymorphism, dan Encapsulation

5/23/12. Inheritance. Pengertian inheritance Deklarasi inheritance Single inheritance Multilevel inheritance Access Control super keyword

Pengenalan OOP. Object-Oriented programming (OOP) Menitikberatkan pada konsep object sebagai elemen dasar dari program.

E-Book PEMROGRAMAN BERORIENTASI OBJEK. Disusun Oleh: Arfian Hidayat, S.Kom

Pemrograman Lanjut Review Class dan Object PTIIK

BAB II VARIABEL DAN TIPE DATA

Jobsheet 09. Overloading and Overriding Method

Bahasa Pemrograman :: Polimorfism and Abstraction

PEWARISAN D E W I S A R T I K A, M. K O M

Bab 8. Dasar-Dasar OOP

Abstract Class dan Interface. Viska Mutiawani, M.Sc

Bahasa Pemograman II. Object Oriented Programming

PRAKTIKUM 3 KONSTRUKTOR DAN OVERLOADING

Membuat dan Menggunakan Class

Dengan menggunakan encapsulation kita dapat membatasi akses langsung suatu class atau program kecuali melalui suatu method yang sudah diberikan.

Transkripsi:

Inner Class Inner Class adalah class yang berada (didefinisikan) di dalam sebuah Class Contoh: class OuterClass { class InnerClass{ Class diagram dalam UML: One of the key benefits of an inner class is the "special relationship" an inner class instance shares with an instance of the outer class. That "special relationship" gives code in the inner class access to members of the enclosing (outer) class, as if the inner class were part of the outer class. In fact, hat's exactly what it means: the inner class is a part of the outer class. Not just a "part" but a full-fledged, card-carrying member of the outer class. Yes, an inner class instance has access to all members of the outer class, even those marked private. (Relax, that's the whole point, remember? We want this separate inner class instance to have an intimate relationship with the outer class instance, but we still want to keep everyone else out. And besides, if you wrote the outer class, then you also wrote the inner class! So you're not violating encapsulation; you designed it this way.) [SCJP Sun Certified Programmer for Java 6 Study Guide (Exam 310-065)] Ada 4 jenis inner class, yaitu : 1. Regular Inner class 2. Method-local inner class 3. Anonymous inner class 4. Static nested classes

Regular Inner Class Istilah regular inner class (inner class biasa) dimaksudkan untuk inner class selain jenis 2, 3, dan 4 Contoh: class OuterClass { class InnerClass{ Jika dicompile dengan perintah : %java Outer.java Maka akan tercipta 2 buah file.class, yaitu : Outer.class MyOuter$MyInner.class. Beberapa hal tentang inner class: Instance inner class memiliki akses ke semua member dari outer class (termasuk member outer class yang ber access modifier private). Sebuah inner class tidak dapat memiliki member static Misalnya: method public static main() tidak bisa dibuat di dalam innre class. Aturan inner class dalam mereferensi dirinya sendiri atau instance dari outer class adalah sebagai berikut : Untuk merujuk pada dirinya sendiri (instance dari inner class) dari dalam inner class, dapat digunakan referensi this atau OuterClass.InnerClass.this. Untuk merujuk pada instance dari outer classnya dari dalam inner class, dapat digunakan referensi OuterClass.this. Untuk membuat instance dari inner class, kita harus memiliki instance dari outer class terlebih dahulu. Tidak ada pengecualisan untuk aturan ini. Untuk membuat instance dari inner class, terdapat 2 cara, yaitu : 1. Dari dalam outer class 2. Dari luar outer class Contoh: class B { //class B ada di dalam class A void sebuahmethodpadab(){ System.out.println("Hello, saya method di kelas B"); System.out.println("kelas B berada dalam kelas A"); void sebuahmethodpadaa() { B b = new B(); //object b diinstance pada sebuah method di class A System.out.println("Hello, saya method kelas A"); System.out.println("Saya membuat object dari inner class B"); b.sebuahmethodpadab();

public class C { public static void main(string[] args) { A.B b = new A().new B(); //kelas B dibuat di luar kelas A b.sebuahmethodpadab(); A a=new A(); a.sebuahmethodpadaa();

Method-Local Inner Class Method-local inner class adalah inner class yang dideklarasikan di dalam method. Mendeklarasikan method-local inner class bukan berarti kita telah membuat instance dari class tersebut. Jadi, sebelum inner class tersebut digunakan, kita harus membuat instancenya dari suatu tempat di dalam method dan setelah definisi inner class tersebut. void methoddia() { // definis method di A class B { // definisi class B didalam method milik A int i = 10; void methoddib() { // deklarasi method di B System.out.println(" i = " + i); // end method B // end class B B b = new B(); b.methoddib(); //end methoddia //end class A Method-local inner class hanya dapat diinstansiasi dari dalam method yang mendefinisikan method-local inner class tersebut. Instance method-local inner class memiliki akses ke semua member dari outer class (termasuk member outer class yang ber access modifier private). void methoddia() { // definisi method di A private int i=10; class B { // definisi class B didalam method milik A int i = 10; void methoddib() { // deklarasi method di B System.out.println(" i = " + i); //akses member A // end method B // end class B B b = new B(); b.methoddib(); //end methoddia //end class A Instance dari method-local inner class tidak dapat mengakses local variabel (termasuk parameter) dari method dimana method-local inner class tersebut didefinisikan. Kecuali bila variabel tersebut bermodifier final. //1 void lakukansesuatu() { //2 int nonfinalvar = 10; final int finalvar = 11; class B { //3

void akseslocalvar() { //4 //ERROR System.out.println("nonFinalVar = " + nonfinalvar); //TIDAK ERROR System.out.println("finalVar = " + finalvar); //4 //3 B b = new B(); b.akseslocalvar(); //2 //1 Method-local inner class yang didefinisikan di dalam static method tidak dapat mengakses non-static member dari outer classnya Modifier-modifier yang dapat diberikan pada method-local inner class adalah : 1. abstract (tidak dapat digabung dengan final) 2. final (tidak dapat digabung dengan abstract)

Anonymous Inner Class Anonymous inner class adalah suatu inner class yang dideklarasikan tanpa nama kelas. Anonymous inner class pasti adalah salah satu dari 2 hal berikut : o Subclass dari suatu class yang telah dideklarasikan o Class implementasi dari suatu interface Suatu anonymous inner class tidak dapat secara bersamaan menjadi subclass dari class yang telah dideklarasikan 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. Anonymous inner class tidak dapat mengimplement lebih dari sebuah interface. Anonymous inner class selalu dibuat sebagai bagian dari suatu statement. Contoh Anonymous inner class sebagai subclass (melakukan override) int i = 10; void methoddia() { System.out.println("i = " + i); public class BBB { //1 public static void main(string[] args) { //2 A aa = new A() { //3 <<== lihat ini void methoddia() { //4 <<== lihat ini i++; System.out.println("i = " + i); //4 ; //3 aa.methoddia(); //2 //1 Variabel referensi aa di atas mereferensi ke suatu instance anonymous inner class yang merupakan subclass dari class A. Jadi, variabel referensi aa bukan mereferensi ke instance dari kelas A. Contoh anonymous inner class sebagai implementasi suatu interface : interface A { public void methoddia(); interface B extends A { public void methoddib(); public class CC { public static void main(string[] args) { B b = new B() { public void methoddia() { System.out.println("Ini method di A");

; public void methoddib() { System.out.println("Ini method di B"); b.methoddia(); b.methoddib(); Anonymous inner class merupakan salah satu bentuk polymorphisme, oleh karena itu, method yang dapat dipanggil dari anonymous inner class adalah method yang dideklarasikan di super class atau interfacenya (meskipun di dalam anonymous inner class dapat dideklarasikan method-method yang tidak ada di super class atau interfacenya). int i = 10; void lakukansesuatu() { i--; System.out.println("i = " + i); public class Test { public static void main(string[] args) { A a = new A() { void lakukansesuatu() { i++; System.out.println("i = " + i); ; //Di bawah ini adalah method yang tidak ada di class A void newmethod() { System.out.println("Ini adalah method baru"); a.lakukansesuatu(); //Tidak error a.newmethod(); //ERROR!!!!!!! Anonymous inner class dapat diletakkan sebagai argument dari suatu method. void lakukansesuatu() { System.out.println("Ini isi aslinya");

class B { static void demoanonymousinnerclasssebagaiargument(a a) { a.lakukansesuatu(); public class BelajarAnonymous3 { public static void main(string[] args) { B.demoAnonymousInnerClassSebagaiArgument(new A() { void lakukansesuatu() { System.out.println("Ini method di anonymous inner class"); ); Tugas: Cobalah contoh-contoh penggunaan inner class! Di dalam sebuah Mobil terdapat MusicPlayer. MusicPlayer dapat dilihat sebagai sebuah object baru yang merupakan bagian dari mobil dan tidak bisa terpisahkan dari mobil. Implementasikan dalam OOP dengan menerapkan inner class.

Mengapa ada inner class? Sampai di sini kita sudah mengenal syntax dan semantic bagaimana cara membuat inner class dapat bekerja tetapi belum terjawab kenapa harus ada inner class. Mengapa desainer Java harus repot-repot menambahkan fitur ini? Secara umum, inner class meng-inherits sebuah class atau meng-implement sebuah interface, dan dan kode-kode pada inner class memanipulasi object-object outer class tempat inner class dibuat. Sehingga kita dapat katakan bahwa sebuah inner class menyediakan seperti sebuah jendela untuk outer class. Tapi bukankah jika kita ingin mereference ke sebuah interface, bukankah kita bisa cukup melakukannya pada outer class untuk mengimplement sebuah interface? Jawabanya adalah, jika memang itu cukup maka lakukan saja. At this point you ve seen a lot of syntax and semantics describing the way inner classes work, but this doesn t answer the question of why they exist. Why did the Java designers go to so much trouble to add this fundamental language feature? Typically, the inner class inherits from a class or implements an interface, and the code in the inner class manipulates the outer-class object that it was created within. So you could say that an inner class provides a kind of window into the outer class. A question that cuts to the heart of inner classes is this: If I just need a reference to an interface, why don t I just make the outer class implement that interface? The answer is "If that s all you need, then that s how you should do it." So what is it that distinguishes an inner class implementing an interface from an outer class implementing the same interface? The answer is that you can t always have the convenience of interfaces sometimes you re working with implementations. Jadi alasan adanya sebuah inner class adalah: Masing-masing class dapat secara bebas men So the most compelling reason for inner classes is: Each inner class can independently inherit from an implementation. Thus, the inner class is not limited by whether the outer class is already inheriting from an implementation. Without the ability that inner classes provide to inherit in effect from more than one concrete or abstract class, some design and programming problems would be intractable. So one way to look at the inner class is as the rest of the solution of the multiple-inheritance problem. Interfaces solve part of the problem, but inner classes effectively allow "multiple implementation inheritance." That is, inner classes effectively allow you to inherit from more than one non-interface.