Memahami Antarmuka Java: Definisi, Penggunaan, dan Praktik Terbaik
Sebuah antarmuka adalah tipe referensi di Java. Mirip dengan kelas. Ini adalah kumpulan metode abstrak. Sebuah kelas mengimplementasikan antarmuka, dengan demikian mewarisi metode abstrak dari antarmuka.
Sama dengan metode abstrak, sebuah antarmuka mungkin juga berisi konstanta, metode default, metode statis, dan tipe bersarang. Tubuh metode hanya ada untuk metode default dan statis.
Menulis antarmuka mirip dengan menulis kelas. Namun, sebuah kelas menggambarkan atribut dan perilaku dari sebuah objek. Dan sebuah antarmuka berisi perilaku yang diimplementasikan oleh sebuah kelas.
Jika kelas yang mengimplementasikan antarmuka tidak abstract, semua metode antarmuka perlu didefinisikan dalam kelas.
Sebuah antarmuka mirip dengan kelas dengan cara berikut:
Sebuah antarmuka dapat berisi sejumlah metode apa pun.
Sebuah antarmuka ditulis dalam file dengan ekstensi .java, dengan nama antarmuka yang cocok dengan nama file.
Kode byte dari sebuah antarmuka muncul dalam file .class.
Antarmuka muncul dalam paket, dan file kode byte yang sesuai harus berada dalam struktur direktori yang cocok dengan nama paket.
Namun, sebuah antarmuka berbeda dari kelas dengan beberapa cara, termasuk:
Anda tidak dapat membuat instance dari antarmuka.
Sebuah antarmuka tidak berisi konstruktor apa pun.
Semua metode dalam antarmuka adalah abstrak.
Sebuah antarmuka tidak dapat berisi bidang instance. Hanya bidang yang dapat muncul dalam antarmuka harus dideklarasikan sebagai static dan final.
Sebuah antarmuka tidak diperluas oleh kelas; ia diimplementasikan oleh kelas.
Sebuah antarmuka dapat memperluas beberapa antarmuka.
Mendeklarasikan Antarmuka
Kata kunci interface digunakan untuk mendeklarasikan antarmuka. Berikut adalah contoh sederhana untuk mendeklarasikan antarmuka:
Contoh
Berikut adalah contoh antarmuka:
/* File name : NameOfInterface.java */ import java.lang.*; // Any number of import statements public interface NameOfInterface { // Any number of final, static fields // Any number of abstract method declarations\ } Antarmuka memiliki properti berikut:
Sebuah antarmuka secara implisit abstract. Anda tidak perlu menggunakan kata kunci abstract saat mendeklarasikan antarmuka.
Setiap metode dalam antarmuka juga secara implisit abstract, jadi kata kunci abstract tidak diperlukan.
Metode dalam antarmuka secara implisit publik.
Contoh
/* File name : Animal.java */ interface Animal { public void eat(); public void travel(); } Mengimplementasikan Antarmuka
Saat sebuah kelas mengimplementasikan antarmuka, Anda dapat menganggap kelas tersebut sebagai menandatangani kontrak, setuju untuk melakukan perilaku spesifik dari antarmuka. Jika sebuah kelas tidak melakukan semua perilaku dari antarmuka, kelas harus mendeklarasikan dirinya sebagai abstract.
Sebuah kelas menggunakan kata kunci implements untuk mengimplementasikan antarmuka. Kata kunci implements muncul dalam deklarasi kelas setelah bagian extends dari deklarasi.
Contoh
/* File name : MammalInt.java */ public class MammalInt implements Animal { public void eat() { System.out.println("Mammal eats"); } public void travel() { System.out.println("Mammal travels"); } public int noOfLegs() { return 0; } public static void main(String args[]) { MammalInt m = new MammalInt(); m.eat(); m.travel(); } } Ini akan menghasilkan hasil berikut:
Keluaran
Mammal eats Mammal travels
Saat mengganti metode yang didefinisikan dalam antarmuka, ada beberapa aturan yang harus diikuti:
Pengecualian yang diperiksa tidak boleh dideklarasikan pada metode implementasi selain yang dideklarasikan oleh metode antarmuka atau subclass dari yang dideklarasikan oleh metode antarmuka.
Tanda tangan metode antarmuka dan tipe pengembalian yang sama atau subtipe harus dipertahankan saat mengganti metode.
Kelas implementasi itu sendiri dapat abstract dan jika demikian, metode antarmuka tidak perlu diimplementasikan.
Saat mengimplementasikan antarmuka, ada beberapa aturan:
Sebuah kelas dapat mengimplementasikan lebih dari satu antarmuka pada satu waktu.
Sebuah kelas hanya dapat memperluas satu kelas, tetapi dapat mengimplementasikan banyak antarmuka.
Sebuah antarmuka dapat memperluas antarmuka lain, dengan cara yang sama seperti kelas dapat memperluas kelas lain.
Memperluas Antarmuka
Sebuah antarmuka dapat memperluas antarmuka lain dengan cara yang sama seperti kelas dapat memperluas kelas lain. Kata kunci extends digunakan untuk memperluas antarmuka, dan kelas anak mewarisi metode dari antarmuka induk.
Antarmuka Sports berikut diperluas oleh antarmuka Hockey dan Football.
Contoh
// Filename: Sports.java public interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } // Filename: Football.java public interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } // Filename: Hockey.java public interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); } Antarmuka Hockey memiliki empat metode, tetapi mewarisi dua dari Sports; dengan demikian, kelas yang mengimplementasikan Hockey perlu mengimplementasikan semua enam metode. Demikian pula, kelas yang mengimplementasikan Football perlu mendefinisikan tiga metode dari Football dan dua metode dari Sports.
Memperluas Beberapa Antarmuka
Sebuah kelas Java hanya dapat memperluas satu kelas induk. Warisan ganda tidak diizinkan. Antarmuka bukan kelas, namun, dan sebuah antarmuka dapat memperluas lebih dari satu antarmuka induk.
Kata kunci extends digunakan sekali, dan antarmuka induk dideklarasikan dalam daftar yang dipisahkan oleh koma.
Misalnya, jika antarmuka Hockey memperluas Sports dan Event, akan dideklarasikan sebagai berikut:
Contoh
public interface Hockey extends Sports, Event
Antarmuka Penanda (Tagging Interfaces)
Penggunaan paling umum dari memperluas antarmuka terjadi ketika antarmuka induk tidak berisi metode apa pun. Misalnya, antarmuka MouseListener dalam paket java.awt.event memperluas java.util.EventListener, yang didefinisikan sebagai berikut:
Contoh
package java.util; public interface EventListener {} Sebuah antarmuka tanpa metode disebut sebagai antarmuka penanda. Ada dua tujuan desain dasar dari antarmuka penanda:
Membuat induk umum – Sama seperti antarmuka EventListener, yang diperluas oleh puluhan antarmuka lain dalam Java API, Anda dapat menggunakan antarmuka penanda untuk membuat induk umum di antara sekelompok antarmuka. Misalnya, saat sebuah antarmuka memperluas EventListener, JVM tahu bahwa antarmuka khusus ini akan digunakan dalam skenario delegasi peristiwa.
Menambahkan tipe data ke kelas – Situasi ini adalah tempat istilah penanda berasal dari. Sebuah kelas yang mengimplementasikan antarmuka penanda tidak perlu mendefinisikan metode apa pun (karena antarmuka tidak memiliki metode apa pun), tetapi kelas menjadi tipe antarmuka melalui polimorfisme.