Anda di halaman 1dari 10

Interface Pada Java

Interface merupakan salah satu yang sering digunakan dalam Pemrograman


Berorientasi Objek. Karena itu, kita harus memahami apa yang dimaksud dengan
interface dan bagaimana penggunaannya dalam Pemrograman Berorientasi Objek.
Berikut penjelasannya,

Interface terdiri dari dua kata:

inter = antar
face = muka

Jadi interface adalah antarmuka.

Kata ini mungkin sering kamu dengar. Contohnya seperti: GUI (Graphical User
Interface) dan CLI (Command Line Interface).

Secara umum, interface berfungsi sebagai penghubung antara sesuatu yang


‘abstrak’ dengan sesuatu yang nyata.

Contoh:

Coba perhatikan handphone-mu, ada berapa tombol di sana?

Kalau HP zaman sekarang, paling cuma ada dua.. yakni tombol power dan tombol
volume.

Tombol-tombol inilah yang dimaksud interface. Sementara isi dalam HP-nya,


kamu tak peduli atau tak akan tahu seberapa kompleks dan abstrak sistem yang
ada di sana.
Saat kamu menekan tombol di HP mu, ada beberapa hal yang mungkin terjadi:

 HP menyala;
 HP mati;
 Suara HP tambah besar;
 Suara HP mengecil;
 Mengambil gambar dari kamera;
 dll.

Ini tergantung bagaimana implementasi yang diberikan untuk tombol-tombol


tersebut.

Beda merek HP, beda lagi cara mereka mengimplementasikannya.

Misal pada HP tertetntu, jika menekan tombol volume 3x.. maka akan mengambil
screenshot. Sementara di HP merek lain, kita tidak bisa melakukan ini.

Pengertian Interface

Apa yang dimaksud dengan interface pada java? Di bawah ini pengertian interface yang
dikutip dari beberapa sumber :
 Interface merupakan kumpulan method–method abstrak. Sebuah kelas yang
mengimplementasikan interface, mewarisi method – method abstrak dari
interface tersebut. 
 Interface adalah sebuah tipe referensi pada Java. Interface secara struktur
serupa dengan class. Isi dari interface adalah method abstract, artinya method
hanya dideklarasikan tidak ditulis secara utuh.

 Interface adalah sebuah file yang hanya berisi method kosong. Method kosong
pada interface ditujukan untuk menjadi behaviour atau sifat wajib dari class yang
mengimplementasikannya.

Dari penjelasan-penjelasan di atas, dapat disimpulkan bahwa Interface merupakan


kumpulan method yang hanya memuat deklarasi dan struktur method, tanpa detail
implementasi. Detail implementasi dari method pada interface ditulis pada kelas yang
mengimplementasikan interface tersebut.

Interface digunakan bila kita ingin mengaplikasikan suatu method yang spesifik, yang
tidak diperoleh dari proses inheritance. Tipe data yang boleh digunakan pada interface
hanya tipe data konstan. Interface tidak berisi perintah kepada system untuk melakukan
sesuatu, interface hanya memetakan apa yang harus dikirimkan dan apa yang
diharapkan untuk dikembalikan.

Manfaat Interface

 Interface memiliki beberapa manfaat yang dapat memudahkan kita dalam melakukan
Pemrograman Berorientasi Objek, diantaranya :
 Interface memungkinkan sebuah subclass diturunkan dari beberapa superclass
(multiple inheritance)

 Interface lebih mempermudah sistem analyst dalam membuat konsep aplikasi

 Pemrograman java menggunakan interface dapat lebih efisien karena adanya


multiple inheritance 

 Perbedaan Inteface Dengan Inheritance

Inheritance (Pewarisan) digunakan ketika parent class memiliki atribut dan method lalu
semuanya diwariskanke subclass. Sedangkan Interface digunakan ketika parent tidak
memiliki apa-apa, hanya method yang tidak memiliki tubuh dan harus diimplementasikan
pada subclassnya. Interface juga memungkinkan terjadinya multiple inheritance, yaitu
sebuah subclass yang diturunkan dari lebih dari satu superclass.

Aturan Penulisan Interface

Interface adalah sebuah tipe referensi pada java. Secara struktur hampir sama dengan
class. Ada beberapa aturan dalam penulisan interface :
 Modifier method hanya boleh public, abstract atau default
 Pada class yang mengimplement, modifier method – method hanya boleh public

 Jumlah parameter method interface harus sama dengan class yang


mengimplemetnya

 Tidak boleh ada method concrete di interface, apabila ada maka program akan
error // Contoh method concrete : public void output(){System.out.println();}

 Tidak boleh ada constructor

 Interface tidak bisa di instanisasi, tapi bisa di instanisasi melalui class yang
mengimplementnya
Contoh Program Interface
Biar nyambung dengan penjelasan saya yang tadi, kita akan pakai contoh
Handphone.

Jadi.. ada dua objek yang akan kita hubungkan dengan interface.

Yakni manusia dan handphone. Manusianya kita sebut saja sebagai PhoneUser.
Karena dia akan menggunakan objek HP.

Maka dapat kita buat class diagramnya seperti ini:

Sekarang mari kita coba buat dalam bentuk kode. Buatlah proyek baru dengan
nama ContohInterface.
Setelah itu, buat class baru di dalam <default package> dengan nama Phone dan isi
kodenya seperti ini:

public interface Phone {


int MAX_VOLUME = 100;
int MIN_VOLUME = 0;

void powerOn();
void powerOff();
void volumeUp();
void volumeDown();
}
Berikutnya, buat lagi class baru dengan nama PhoneUser dan isi kodenya seperti ini:

public class PhoneUser {

private Phone phone;

public PhoneUser(Phone phone) {


this.phone = phone;
}

void turnOnThePhone(){
this.phone.powerOn();
}

void turnOffThePhone(){
this.phone.powerOff();
}

void makePhoneLouder(){
this.phone.volumeUp();
}

void makePhoneSilent(){
this.phone.volumeDown();
}
}
Berikutnya kita akan membuat class implementasi dari interface Phone. Kita coba
buat satu saja dulu.

Silahkan buat class baru dengan nama Xiaomi, kemudian isi kodenya seperti ini:

public class Xiaomi implements Phone {

private int volume;


private boolean isPowerOn;

public Xiaomi() {
// set volume awal
this.volume = 50;
}

@Override
public void powerOn() {
isPowerOn = true;
System.out.println("Handphone menyala...");
System.out.println("Selamat datang di XIAOMI");
System.out.println("Android version 29");
}

@Override
public void powerOff() {
isPowerOn = false;
System.out.println("Handphone dimatikan");
}

@Override
public void volumeUp() {
if (isPowerOn) {
if (this.volume == MAX_VOLUME) {
System.out.println("Volume FULL!!");
System.out.println("sudah " + this.getVolume() + "%");
} else {
this.volume += 10;
System.out.println("Volume sekarang: " +
this.getVolume());
}
} else {
System.out.println("Nyalakan dulu donk HP-nya!!");
}
}

@Override
public void volumeDown() {
if (isPowerOn) {
if (this.volume == MIN_VOLUME) {
System.out.println("Volume = 0%");
} else {
this.volume -= 10;
System.out.println("Volume sekarang: " +
this.getVolume());
}
} else {
System.out.println("Nyalakan dulu donk HP-nya!!");
}
}
public int getVolume() {
return this.volume;
}

}
Terakhir, buatlah class Main dengan isi sebagai berikut:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// membuat objek HP
Phone redmiNote8 = new Xiaomi();

// membuat objek user


PhoneUser dian = new PhoneUser(redmiNote8);

// kita coba nyalakan HP-nya


dian.turnOnThePhone();

// biar enak, kita buat dalam program


Scanner input = new Scanner(System.in);
String aksi;

while (true) {
System.out.println("=== APLIKASI INTERFACE ===");
System.out.println("[1] Nyalakan HP");
System.out.println("[2] Matikan HP");
System.out.println("[3] Perbesar Volume");
System.out.println("[4] Kecilkan Volume");
System.out.println("[0] Keluar");
System.out.println("--------------------------");
System.out.print("Pilih aksi> ");
aksi = input.nextLine();

if(aksi.equalsIgnoreCase("1")){
dian.turnOnThePhone();
} else if (aksi.equalsIgnoreCase("2")){
dian.turnOffThePhone();
} else if (aksi.equalsIgnoreCase("3")){
dian.makePhoneLouder();
} else if (aksi.equalsIgnoreCase("4")){
dian.makePhoneSilent();
} else if (aksi.equalsIgnoreCase("0")){
System.exit(0);
} else {
System.out.println("Kamu memilih aksi yang salah!");
}
}

}
Sekarang coba jalankan class Main. Caranya, Klik kanan lalu pilih Run File atau
bisa juga dengan menekan  Shift + F6 .
Maka hasilnya:

Kalau kita perhatikan di dalam method main().. kita hanya menggunakan objek


dari class PhoneUser saja.

Coba lihat kode-kode ini:

dian.turnOnThePhone();
dian.turnOnThePhone();
dian.turnOffThePhone();
dian.makePhoneLouder();
dian.makePhoneSilent();
Saat kita memanggil method-method ini, maka method yang ada di dalam
objek redmiNote8 yang akan dipanggil.

Ini karena mereka terhubung dengan interface.

Lalu pertanyaanya:

Mengapa Harus Pakai Interface?

Sebenarnya kita tidak harus selalu menggunakan interface. Tapi dalam kasus
tertentu, interface akan sangat berguna.

Misalnya gini:

Kita tahu objek PhoneUser membutuhkan objek dari handphone. Tanpa objek


handphone, si objek user nggak akan bisa kita buat.

Ini karena kita menetapkan pada konstruktornya.

Btw, ini juga disebut hubungan dependency..


Nah, di sana kita menggunakan interface Phone untuk membaut objek dependency-
nya.

Kalau gak pakai interface memangnya kenapa?

Untuk menjawab pertanyaan ini, mari kita coba ubah Phone menjadi Xiaomi.

Apa yang akan terjadi?

Untuk saat ini tidak akan terjadi apa-apa. Tapi sekarang bagaimana kalau kita
punya objek baru dari class yang mengimplementasikan interface Phone juga.

Kita sebut saja objek baru tersebut adalah iPhoneX yang merupakan instance dari
class IPhone.
Maka objek iPhoneX tidak akan bisa diberikan kepada objek PhoneUser. Karena di
konstruktornya dia cuma bisa pakai Xiaomi saja.

Jadi.. mengapa kita harus pakai interface?

Interface akan membuat si objek PhoneUser bisa menggunakan objek handphone


apapun, dengan syarat objek handphone tersebut harus mengimplementasikan
method dari interface Phone.

Hal-Hal yang tidak boleh dilakukan di Interface


Ada beberapa hal yang tidak boleh kamu lakukan saat membuat interface:

 Jangan buat variabel di dalam interface, tapi membuat konstanta boleh;


 Jangan mengisi method-nya, cukup tuliskan nama method, tipe data, dan
parameter saja. Tapi untuk default metod boleh punya isi.

Contoh:

 Jangan berikan modifier privete atauapun protected pada method dan


konstanta yang ada di dalam interface.
 Interface tidak bisa dibuat objek instance-nya dengan kata kunci new.

Anda mungkin juga menyukai