Menu

Interface Java: Mendefinisikan Kontrak dan implements

Apa itu interface di Java, cara mendefinisikan dan mengimplementasikannya, default method dan static method, serta perbedaan interface dengan abstract class.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Interface Adalah Kontrak

Interface mendeklarasikan apa yang bisa dilakukan sebuah class tanpa mengatakan bagaimana. Isinya daftar signature method yang dijanjikan akan dipenuhi oleh setiap class yang mengimplementasikannya. Tujuannya adalah decoupling: kode bisa bekerja dengan tipe interface tanpa peduli class konkret mana yang ada di baliknya.

Circle implements Shape berarti Circle wajib mendefinisikan area dan perimeter. Begitu itu dipenuhi, Circle adalah Shape dan bisa disimpan di variabel bertipe Shape.

Banyak Class, Satu Tipe

Kekuatannya terlihat saat beberapa class yang tidak saling berhubungan mengimplementasikan interface yang sama. Kode yang ditulis untuk Shape bisa menangani semuanya:

Loop itu tidak pernah bertanya "ini Circle atau Rectangle?". Ia hanya memanggil area() dan memercayai kontraknya. Menambahkan Triangle nanti tidak membutuhkan perubahan apa pun di sini.

Mengimplementasikan Banyak Interface

Sebuah class hanya bisa meng-extend satu class, tetapi bisa mengimplementasikan interface sebanyak apa pun. Beginilah cara Java melakukan "multiple inheritance" perilaku dengan aman:

Tuliskan interface-nya dipisahkan koma setelah implements. Class itu wajib memenuhi semuanya.

Method default dan static

Sejak Java 8, interface bisa membawa body method. Method default memberi class yang mengimplementasikannya implementasi siap pakai yang diwarisi secara gratis (dan boleh di-override):

Method default memungkinkan sebuah interface berkembang, yaitu menambahkan method tanpa merusak setiap implementasi yang sudah ada. Sebaliknya, method interface static berperilaku seperti static member lainnya: ia adalah utilitas yang kamu panggil langsung pada interface itu, misalnya Comparator.naturalOrder().

Konstanta

Field di dalam interface secara implisit bersifat public static final: field itu adalah konstanta, bukan state instance:

interface Physics {
    double GRAVITY = 9.81;   // automatically public static final
}

Secara tradisional, interface tidak menyimpan state per objek; tidak adanya field instance adalah bagian dari hal yang membedakannya dengan class.

Functional Interface

Interface yang punya tepat satu abstract method disebut functional interface, dan kamu bisa mengimplementasikannya dengan lambda expression, bukan dengan class utuh:

Inilah fondasi lambda di Java dan tipe-tipe di java.util.function (Function, Predicate, Supplier, dan kawan-kawannya). Anotasi @FunctionalInterface membuat maksudnya jelas dan memungkinkan compiler menegakkan aturan satu method itu.

Interface vs Abstract Class

Keduanya memungkinkanmu menulis kode berdasarkan abstraksi, jadi kapan memilih yang mana?

  • Interface: kemampuan yang bisa dimiliki class yang tidak saling berhubungan. Bird dan Airplane sama-sama bisa menjadi Flyable. Sebuah class bisa mengimplementasikan banyak interface. Tidak ada state instance.
  • Abstract class: state dan kode bersama di antara class yang erat kaitannya. Cat dan Dog sama-sama meng-extend Animal, mewarisi field bersama dan method yang sebagian sudah diimplementasikan. Sebuah class hanya bisa meng-extend satu class.

Pola yang umum adalah menggabungkan keduanya: interface mendefinisikan kontraknya, dan abstract class mengimplementasikan bagian boilerplate, sehingga subclass konkret cukup mengisi bagian yang spesifik saja.

Berikutnya: Abstract Class

Interface mendefinisikan perilaku tanpa state. Abstract class berada di antara interface dan class utuh: ia bisa mendeklarasikan method yang belum diimplementasikan sekaligus membawa field dan constructor. Itu topik halaman berikutnya.

Pertanyaan yang sering diajukan

Apa itu interface di Java?

Interface adalah kontrak: sekumpulan signature method (dan konstanta) yang dijanjikan akan disediakan oleh sebuah class. Interface menyatakan apa yang bisa dilakukan sebuah class, bukan bagaimana caranya. Class memakai kata kunci implements untuk mengambil sebuah interface dan wajib menyediakan body untuk setiap abstract method yang dideklarasikan interface itu. Interface memungkinkan class yang tidak saling berhubungan dipakai secara bergantian lewat satu tipe yang sama.

Apa perbedaan interface dan abstract class di Java?

Sebuah class bisa mengimplementasikan banyak interface tetapi hanya bisa meng-extend satu class (abstract). Secara tradisional, interface tidak menyimpan state instance dan hanya mendeklarasikan perilaku, sedangkan abstract class bisa punya field, constructor, dan logika yang sebagian sudah diimplementasikan. Pakai interface untuk mendefinisikan kemampuan yang bisa dimiliki beberapa class yang tidak saling berhubungan; pakai abstract class untuk berbagi state dan kode di antara subclass yang erat kaitannya.

Apakah interface Java bisa punya body method?

Bisa, sejak Java 8. Method interface yang ditandai default menyediakan body yang diwarisi oleh class yang mengimplementasikannya (dan boleh di-override), sedangkan method interface static menyediakan perilaku utilitas yang bisa dipanggil langsung pada interface itu. Method interface biasa tetap abstract, hanya berupa signature, dan class yang mengimplementasikannya wajib mendefinisikannya.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai