abtrak kelas, interface kelas
1
:: abstract class + interface
:: abstract class
Saat kita membuat sebuah superclass, kita tahu bahwa kita dapat memakai semua metode yang
dimilikinya pada class anaknya. Atau kalau kita butuh metode tersebut diperbarui, kita tinggal
melakukan override pada metode tersebut.
Tapi, pada suatu kasus, kita ingin membuat superclass yang bernama LivingThing(makhluk hidup).
Class ini punya beberapa method yang sudah kita kenal seperti makan, bernafas, tidur, dan
berjalan. Ada satu metode yang tidak dapat kita generalisasi. Contohnya adalah method berjalan.
Human sebagai subclass dari makhluk hidup berjalan dengan 2 kaki, sedangkan Dog berjalan
dengan 4 kaki. Untuk membuat superclass yang umum, kita bisa membuat suatu superclass yang
memiliki beberapa metode dengan implementasi dan beberapa tidak. Class ini disebut abstract
class.
Secara umum, abstract class adalah class yang tak dapat diinstansiasi. Biasanya abstract class
berada dalam hierarki tertinggi dalam PBO (pemrograman berorientasi objek).
Metode di dalam abstract class yang tidak berisi kode program adalah abstract method (metode
abstract). Nantinya, method ini harus di-override oleh subclass-nya. Jadi, kita hanya menulis
deklarasi method tanpa tubuh metode dan memakai keyword abstract. Contohnya:
public abstract void iniMetode();
Deklarasi Method ini disebut sebagai prototype method.
Sekarang, kita coba buat abstract class pertama kita:
2
Suatu metode yang sudah dideklarasikan abstract harus diakhiri tanpa memakai tubuh program.
Jika ditulis seperti ini:
maka akan terjadi error seperti berikut:
Ketika sebuah class dibuat sebagai subclass dari class LivingThing, class itu harus meng-override
metode abstract walk(). Jika tidak, class tersebut tidak akan dapat dikompilasi dan akan terjadi
error.
Contoh pembuatan subclass yang benar:
Jika class Human tidak meng-override metode walk(), maka akan muncul pesan error seperti
berikut:
3
Tapi, walau class Human tidak meng-override metode yang lain seperti breath() dan eat() (yang
tidak abstract) tidak akan terjadi error.
Jadi, fungsi abstract class tak lain adalah untuk membuat prototype bagi class di tingkatan paling
atas dalam hierarki class dan subclass-nya yang menyediakan detail implementasi dari abstract
class tersebut.
Question
• Apakah sebuah class biasa bisa memiliki abstract method? Apakah abstract class boleh tidak
memiliki abstract method? Silahkan analisis secara mandiri.
• Bagaimana jika class LivingThing memiliki sebuah constructor? (Mengingat bahwa abstract
class tidak bisa diinstansiasi) Bisakah? Jika bisa, apakah fungsi dan penggunaannya sama
dengan class yang lain?
4
:: interface
interface adalah sebuah blok yang berisi deklarasi metode saja untuk diimplementasikan pada
class lain. Jadi, metode yang ada di dalam interface tidak memiliki kode program (bersifat
abstract). Contoh interface:
Interface ini nantinya berguna untuk membuat satu subclass memiliki lebih dari satu superclass.
Tapi bukan secara extends (inheritance), tapi implements (implementasi).
Coba kita buat class line yang mengimplementasikan interface Relation di atas.
Jika salah satu dari method isGreater(), isLess() atau isEqual() dihilangkan dari class Line ini,
maka akan terjadi error yang mengharuskan kita meng-override semua metode tersebut
(benarkah?). Ini disebabkan karena semua metode yang dideklarasikan di interface harus dioverride
oleh class yang mengimplementasikannya. Kenapa serepot itu? Ini sesuai dengan salah
5
satu fungsi interface membuat suatu class yang bisa diimplementasikan oleh berbagai class
lain yang tidak berelasi sama sekali.
Untuk latihan, misalkan kita mengimplementasikan interface Radio dan Kamera pada class
Handphone seperti di bawah ini:
Fungsi interface sebetulnya cukup jelas adalah untuk membuat satu template untuk class yang
ingin mengimplementasikannya supaya sama dengan template. Atau dengan kata lain, ada
standarisasi dalam mengimplementasikan suatu interface.
Question
- Nah interface hanya dapat diisi dengan deklarasi method saja… Benarkah? Silahkan
lakukan analisis mandiri.
- Semua method di interface adalah abstract. Apakah bisa ditambahi dengan keyword
abstract pada setiap method-nya? Sama saja atau jadi berbeda?
6
:: interface vs abstract class
Perbedaan interface dan abstract class cukup terlihat dari pemakaiannya. interface itu
diimplementasikan dan abstract class itu diturunkan (diwariskan).
Keduanya dapat dipakai bersamaan dalam satu class. Misalkan seperti contoh di bawah ini:
Tambahkan abstract class di atas ke class HandPhone yang sudah kita buat, sehingga class
HandPhone menjadi:
Question
• Apakah kita bisa membuat class baru yang extends dari class HandPhone? Apakah perlu
untuk meng-override semua metodenya juga?
7
Exercise
Buat suatu class Compo yang mengimplementasikan interface Radio dan Tape seperti Class
Diagram di bawah ini. Kemudian buatlah sebuah launcher class untuk mencobanya.
Buatlah abstract class AlatMusik dan diturunkan ke dua class, yaitu class MusikTiup serta class
MusikGesek seperti class diagram di bawah ini.
AlatMusik (abstract)
+setNamaAlat(nama: String)
+setBunyi(bunyi: String)
+getInfo()
MusikGesek
-bunyi: String
-namaAlat: String
-jumDawai: Integer
+MusikGesek()
MusikTiup
-bunyi: String
-namaAlat: String
+MusikTiup()
Tulislah juga suatu launcher class yang membuat sebuah objek terompet yang merupakan
instance dari class MusikTiup yang memiliki atribut bunyi “toet-toet”. Buatlah pula sebuah objek
biola yang merupakan instance dari class MusikGesek yang memiliki atribut bunyi “ngik-ngok” dan
jumlah dawai 4 buah. Setiap kali membuat objek baru
