Kelas Abstrak dan Interface
Kelas Abstrak
public abstract class Animal { Contoh 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 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 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, juga dideklarasikan dua buah method, yaitu walk(), dan sound(). Method di dalam kelas Animal tidak didefiniskan impelementasi method, dengan harapan bahwa obyek turunan hewan yang spesifik, seperti Chicken dan Cat akan menyediakan implementasinya yang spesifik dengan kondisi masing-masing hewan.
Pada Contoh di atas, method abstrak walk() dan sound() dalam kelas Animal diimplementasikan oleh kelas Chicken dan Cat. Kelas abstrak juga boleh tidak memiliki method abstrak sebagaimana ditunjukkan pada contoh program berikut.
public abstract class Vehicle { private String type; public String getType() { return type; }
Apabila ada satu saja method yang dideklarasikan dalam sebuah kelas sebagai method abstrak, maka kelas tersebut harus dideklarasikan abstract. Method abstrak adalah method yang sudah dideklarasikan, tetapi belum diimplementasikan. Sebuah method ditulis dengan kata kunci 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 abstract void myAbstractMethod();
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; 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.
Mendeklarasi 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.
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 Satu interface Flyer dapat diimplementasikan oleh beberapa kelas. Sebagai contoh, pesawat terbang (Airplane), burung (Bird), dan superman (Superman), semuanya dapat terbang.
Multiple Interface Seperti telah dijelaskan di sebelumnya, 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 me-extends kelas Airplane dan mengimplementasi interface Flyer. Kelas SeaPlane juga mengimplementasi interface Sailer.
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.