PENGGUNAAN KELAS DI JAVA
3.4 Keyword abstract
Keyword abstract dapat diterapkan pada kelas dan method.
3.4.1 Kelas abstrak
Sebuah kelas dapat dideklarasikan sebagai kelas abstrak. Tujuan membuat kelas abstrak adalah agar satu kelas lain dapat memperluasnya (extend) dengan jalan menjadi subclass darinya. Sebagai contoh, bayangkan seekor hewan yang mempunyai method generik yang sama, yang dimiliki oleh semua hewan. Keadaan spesifik dari hewan tersebut seperti warnanya, jumlah kakinya, suaranya, dan sebagainya belum diiketahui. Untuk itulah, diperlukan kelas abstrak. Kelas tersebut tidak dapat diinstansiasi. Hanya turunan dari kelas abstrak yang dapat diinstansiasi. Berikut ini contoh kelas abstrak:
public abstract class Animal { private int numOfFoots; private Color color;
public abstract void walk(); public abstract void sound(); }
public class Cat extends Animal { public void walk() {
System.out.println("cat walks using 4 legs"); }
public void sound() {
System.out.println("miaouw"); }
}
public class Chicken extends Animal { public void walk() {
System.out.println("chicken walks using 2 legs"); }
public void sound() {
System.out.println("kukuruyuk"); }
}
Pada kode program di atas dideklarasikan kelas Animal yang abstrak, di mana di dalamnya dideklarasikan dua variabel yaitu numOfFoots dan color. Selain itu, dapat juga dideklarasikan dua buah method, yaitu walk(), dan sound(). Dalam method di dalam kelas Animal, tidak didefiniskan impelementasi method yang dideklarasikannya, dengan harapan bahwa obyek turunan hewan yang spesifik, seperti Chicken dan Cat akan menyediakan implementasinya yang spesifik dengan
kondisi masing-masing hewan. Dalam contoh di atas, method abstrak walk() dan sound() dalam kelas Animal diimplementasikan oleh kelas Chicken dan Cat.
Kelas abstrak dapat terdiri dari satu atau lebih method abstrak seperti contoh di atas. Kelas abstrak juga boleh tidak memiliki method abstrak sebagaimana ditunjukkan pada program berikut.
public abstract class Vehicle { private String type;
public void getType() { return type;
} }
Kelas Vehicle di atas merupakan contoh kelas abstrak yang legal. Apabila ada satu saja method yang dideklarasikan dalam sebuah kelas sebagai method abstrak, maka kelas tersebut harus dideklarasikan abstract.
3.4.2 Method abstrak
Method abstrak adalah method yang sudah dideklarasikan, tetapi belum
diimplementasikan. Sebuah method ditulis dengan keyword abstract ketika kelas turunan (subclass) di bawahnya menyediakan implementasi method tersebut.
Method abstrak ditandai dengan modifier abstract, tidak memiliki
implementasi, dan diakhiri dengan tanda titik koma (;). public void myAbstractMethod();
3.5 Interface
Interface mendefinisikan aturan perilaku (protocol of behavior) yang
dapat diimplementasikan oleh kelas manapun. Interface mendefinisikan satu set method tanpa menyediakan implementasinya. Sebuah kelas yang mengimplementasi sebuah interface terikat kontrak oleh interface tersebut untuk mengimplementasi semua method yang ada di dalam
interface. Dengan kata lain, kelas tersebut terikat untuk
meng-implementasikan perilaku tertentu yang tertulis dalam interface. Secara substansi, interface merupakan kumpulan dari method abstrak dan konstanta.
Interface memiliki kemiripan dengan kelas abstrak, di mana keduanya
memuat method abstrak. Perbedaan penting antara interface dan kelas abstrak adalah :
Sebuah interface tidak dapat membuat implementasi satu method pun, sementara kelas abstrak dapat membuat implementasi satu atau lebih method abstrak
Sebuah kelas dapat mengimplementasi beberapa interface, tetapi ia hanya dapat meng-extends satu superclass.
Interface bukan merupakan bagian dari hirarki kelas. Dua kelas yang tidak berhubungan dalam jalur hirarki kelas dapat mengimplementasi interface yang sama.
3.5.1 Deklarasi interface
Misalkan ada sekumpulan obyek yang memiliki kemampuan yang sama, yaitu mereka semua dapat terbang. Untuk itu dapat dibuatkan sebuah
interface publik, yang dinamakan Flyer, yang memiliki tiga operasi
takeOff, land, dan fly.
<<interface>> Flyer + takeOff() + land() + fly() + fly() + takeOff() + land() Airplane
Gambar 3.1 Interface Flyer dan implementasinya oleh kelas Airplane.
Panah dengan garis putus-putus di atas menggambarkan kelas Airplane mengimplementasikan interface Flyer. Kode Java dari disain kelas di atas ditunjukkan sebagai berikut.
public interface Flyer { public void takeOff(); public void land(); public void fly(); }
public class Airplane implements Flyer { public void takeOff() {
//accelerate until lift-off //raise landing gear }
public void land() { //lower landing gear
//decelerate and lower flaps until touch-down //apply breaks
}
public void fly() {
//keep those engines running }
}
Satu interface Flyer dapat diimplementasikan oleh beberapa kelas. Sebagai contoh, pesawat terbang (Airplane), burung (Bird), dan superman (Superman), semuanya dapat terbang.
+ fly() <<interface>> Flyer + takeOff() + land() Airplane + fly() + takeOff() + land() + buildNest() + layEggs() + fly() Bird + takeOff() + land() + leapBuilding() + stopBullet() Superman + takeOff() + land() + fly()
Gambar 3.2 Implementasi interface Flyer oleh beberapa kelas. Sebuah kelas Airplane mungkin merupakan subclass dari kelas Vehicle (kendaraan), dan ia dapat terbang. Kelas Bird merupakan
subclass dari kelas Animal (hewan), dan ia pun dapat terbang. Contoh
di atas menggambarkan bagaimana sebuah kelas dapat mewarisi satu kelas tetapi mengimplementasi beberapa interface sekaligus.
3.5.2 Implementasi multiple interface
Seperti telah dijelaskan di atas, sebuah kelas dapat mengimplementasi lebih dari satu interface. Sebagai contoh, sebuah SeaPlane (pesawat yang dapat mendarat dan terbang di/dari air) tidak hanya dapat terbang, ia juga dapat berlayar. Kelas SeaPlane meng-extends kelas Airplane, yang berarti ia juga mewarisi implementasi dari interface Flyer. Kelas SeaPlane juga mengimplementasi interface Sailer.
+ cruise() <<interface>> Sailer + dock() + fly() <<interface>> Flyer + takeOff() + land() RiverBarge + dock() + cruise() Airplane + takeOff() + land() + fly() SeaPlane + dock() + cruise() Vehicle Helicopter
Gambar 3.3 Contoh dari konsep implementasi multipe interface.
3.5.3 Penggunaan interface Biasanya interface digunakan untuk:
Mendeklarasikan method yang akan diimplementasikan oleh satu atau beberapa kelas.
Menunjukkan interface sebuah obyek ke publik tanpa menunjukkan isi kelas sebenarnya.
Menangkap kesamaan di antara beberapa kelas tanpa perlu memasukkannya dalam hirarki kelas (superclass - subclass).
Mensimulasikan konsep pewarisan banyak kelas dengan mendeklarasikan kelas yang mengimplementasikan beberapa interface sekaligus.