Bahasa Pemrograman 2 Abstract & Interface Abstract & Interface
[email protected]
Ab t Abstract t Cl Class [1] • Saat kita membuat sebuah superclass, kita tahu bahwa kita dapat menurunkan semua metode yang dimilikinya pada class a a ya. anaknya. • Atau kalau kita butuh metode tersebut diperbarui kita tinggal melakukan override diperbarui, pada metode tersebut pada subclassnya. • Tapi ada kasus dimana ada satu/lebih metode saja yang harus dioverride
Ab t Abstract t Cl Class [2] • Misalkan method bersuara() pada class Binatang (contoh pertemuan kemarin) • Method bersuara seharusnya dioverride karena tidak memiliki bentuk di class binatang (-> tergantung jenis binatangnya) • Untuk membuat method bersuara harus dioverride, maka method tersebut perlu dibuat menjadi abstract. abstract • abstract = tak berbentuk.
Ab t Abstract t Cl Class [3] • Penulisan abstract method adalah sebagai berikut: public abstract String bersuara();
• Untuk selanjutnya, method ini disebut sebagai abstract method atau prototype method • Dapat kita lihat bahwa method bersuara: – tidak memiliki ‘tubuh’/implementasi tubuh /implementasi method. method – menggunakan keyword abstract.
Ab t Abstract t Cl Class [4] • Jika kita paksa untuk memiliki tubuh program seperti ini: public abstract String bersuara() { System.out.println(“weee…”); }
• Maka akan terjadi error: abstract methods cannot have a body
Ab t Abstract t Cl Class [5] • Apabila abstract method bersuara tadi kita tambahkan ke class Binatang yang sudah kita buat, maka akan muncul error: Binatang is not abstract and does not override abstract method bersuara() in binatang g
• Pemecahannya adalah dengan mengubah class Binatang menjadi sebuah abstract class. class (Bila ada abstract methods dalam satu class, maka class tersebut harus abstract juga)
Ab t Abstract t Cl Class [6] abstract class Binatang { public abstract String bersuara(); public void makan(int x) { System.out.println("Makanmakan"); }
}
Binatang
Anjing
abstract class abstract class
Kucing
Ab t Abstract t Cl Class [7] • Abstract class ini tidak bisa diinstansiasi (karena memiliki method yang abstract)
• Questions: – Apakah A k h dalam d l sebuah b h abstract bt t class l boleh b l h tak memiliki abstract methods sama sekali? – Bagaimana jika sebuah abstract class memiliki constructor? Bagaimana fungsi dan pemakaian constructor tersebut?
Constructor of Abstract Class Constructor of Abstract Class
Setiap class dalam Java pasti memiliki konstruktor secara default!
Contoh yg Error Contoh yg Error
Tidak ada method abstrak!
Contoh yang benar Contoh yang benar
Contoh
Interface • Interface Interface: Kumpulan fungsi/konstanta K l f i/k t t yang tidak tid k berisi b ii implementasi • Contoh: public interface mp3Player { public interface mp3Player { public static final int STATUS; List TRACKLIST; //final dan static void playTrack(); id l T k() void stopTrack(); void volumeUp(); p(); void volumeDown(); }
I t f Interface[1] [1] • Interface adalah sebuah blok yang berisi deklarasi metode untuk diimplementasikan di class lain. – Tidak ada tubuh method
• Berarti semua metode dalam interface adalah abstract. abstract • Tapi pada pendeklarasiannya tidak perlu menggunakan keyword abstract. abstract
I t f Interface[2] [2] • Fungsinya adalah membuat suatu class yang bisa diimplementasikan oleh berbagai class lain yang tidak berelasi sama sekali. • Contoh: public interface kamera { public void setPixel(float pixel); public void ambilGambar(); }
I t f Interface[3] [3] • Interface digunakan untuk mendukung multiple inheritance (satu class memiliki superclass lebih dari satu) • Selain bisa mendeklarasikan method abstract, abstract di dalam interface juga dapat diberikan attribute final (konstanta). (konstanta) • Konstanta ini juga diwariskan kepada class yang mengimplementasikan interface tersebut. tersebut
Pewarisan Interface Pewarisan Interface • Suatu interface juga dapat mewarisi interface y g yang lain, seperti pewarisan biasa p p public interface NamaInterface extends InterfaceA InterfaceA, InterfaceB{ ... }
Interface
public class Handphone implements MP3Player, GPS, InternetDevice { … }
Interface • Class yang mengimplementasikan suatu interface harus mendeklarasikan seluruh method yang ada di interface. • Jika tidak maka class tersebut harus Jika tidak maka class tersebut harus dideklarasikan sebagai sebuah abstract class
Bentuk Umum Interface Bentuk Umum Interface
Menggunakan Interface Menggunakan Interface • class NamaKelas [extends NamaKelasSuper ] implements NamaInterface1, NamaInterface2 implements NamaInterface1, NamaInterface2 { ... }
Contoh lain Interface Contoh lain Interface
Mengapa Interface Mengapa Interface • Mengapa dibutuhkan interface? Dalam bahasa p pemrograman lain seperti C++, dikenal istilah g p multiple‐inheritance, – artinya sebuah objek bisa diturunkan dari dua artinya sebuah objek bisa diturunkan dari dua atau lebih objek berbeda. Misalnya, objek X memiliki super kelas A dan B memiliki super kelas A dan B.
• Pada Java, hal ini tidak dimungkinkan, karena objek hanya bisa extends dari 1 objek saja, dan disinilah interface Java menjadi solusinya
Aturan Interface Aturan Interface • K Kelas yang mengimplementasikan interface, hanya mewarisi l i l t ik interface h ii konstanta dari kelas interface, tidak seperti kelas turanan yang semua anggota baik variabel maupun metode akan diwariskan ke anaknya. anaknya • Kelas yang mengimplementasikan intrerface tidak mewarisi metode t d yang bukan interface, yakni kelas yang memiliki b k i t f k ik l iliki implementasi pada kelas interface. • Pada kelas turunan, akan diwarisi semua fungsi yang ada baik yang abstrak b k maupun yang ada imptementasinya d i i pada super kelasnya. d k l • Hirarki kelas independen, yaitu kelas interface p ,y dengan kelas yang g y g mengimplementasikannya bisa saling tidak berelasi.
I t f Interface vs abstract[1] bt t[1] • Penggunaan keyword extends dan implements adalah salah satu perbedaan dari keduanya. • Semua methods di interface itu abstract, tapi hanya beberapa atau mungkin hanya satu methods yang abstract di abstract class. • abstract class bisa mengimplementasikan interface, tapi interface tak bisa mewarisi abstract bt t class. l • abstract dapat mendeklarasikan variabel i t instan, iinterface t f h hanya d dptt b berupa konstanta k t t
Exercise • Terdapat d d class, A dan dua l d B. Class A l mendapatkan atribut dari class B. Karena itu class A merupakan ________ class B, atau class B merupakan ________ class A. • Jika class A memiliki class A memiliki atribut a1 dan a1 dan a2, a2 method getA1(), getA2(). Class B memiliki atribut b1 dan b1 dan b2, method getB1(), getB2(). b2 method getB1() getB2() Tuliskan kodenya dalam Java
Exercise
Exercise • Dari diagram relasi kelas tersebut, misalkan y ((z) dibuat ) dari kelas F, tentukan sebuah obyek class dari method printLine() yang dipanggil: • • • •
z.printLine(1); z.printLine(2, “OOP”); z.printLine(“Java”); i tLi (“J ”) z.printLine(“OOP”, “Java”);
Exercise
Exercise
• Apa outputnya?
NEXT • Polimorfisme