Langsung ke konten utama

Tutorial Java OOP: Memahami Interface di Java (dan Contohnya)

Tutorial Java OOP: Memahami Interface di Java (dan Contohnya)


 
Ada yang bilang gini:
“Interface adalah blue print dari class. Isi method-nya kosong dan nanti akan diimplementasikan pada class lain.”
Kamu bisa paham maksudnya?
Tidak?
Sama.. hehe 😄
Ya, seperti itulah penjelasan yang saya terima saat baru awal belajar Java dan OOP dulu. Bukan tambah paham, malah bikin bingung.
Interface memang tak memiliki isi method.. dan pada tutorial sebelumnya kita juga pakai Interface untuk contoh Polimorfisme.
Tapi bukan itu sebenarnya kegunaan utama dari Interface.
Lalu apa donk?
Mari kita bahas..

Apa itu Interface?

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.
Memahami Interface dalam OOP Java
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.
Nah, konsep ini juga ada di dalam OOP.
Bagaimana Contohnya?
Mari kita lihat:

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:
Class Diagram Interface
Sekarang mari kita coba buat dalam bentuk kode. Buatlah proyek baru dengan nama ContohInterface.
Membuat Proyek baru di Netbeans
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:
Demo Contoh Program Interface
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..
Class PhoneUser
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.
Class PhoneUser menggunakan 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.
Phoneuser menggunakan objek iphonex
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.
Paham kan maksud saya?
Kalau belum paham.. mari diskusikan di komentar. 😄

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.
Kalau dilanggar gimana?
Ya programnya akan error!

Apa Selanjutnya?

Jadi kesimpulannya:
Interface merupakan penghubung antar objek. Interface bersifat abstrak, sehingga objek yang menggunakannya tidak akan perduli bagaimana ia diimplementasikan.
Karena bersifat abstrak, interface tidak bisa dibuat objek instance dengan kata kunci new.
Interface sebenarnya mengamalkan prinsip Abstraksi dan Enkapsulasi (pembungkusan).

Komentar

Postingan populer dari blog ini

PROSEDUR PEMBUATAN INDIKATOR

PROSEDUR PEMBUATAN INDIKATOR 1. EBT (ERIOCROM BLACK T) Timbang 100 mg serbuk zat warna EBT ,10 gram Kristal NaCl atau Kristal Na2SO4 an hidrat. Kedua zat tersebut dicampur dengan cara menggerus didalam mortar sampai halus dan merata. Penggunaannya 100 mg (seujung spatel ) untuk satu kali titrasi. 2. Merah metil Larutkan 25 mg metil P dengan 0,95 ml larutan Natrium hidroksida 0,05 N dan 5 ml etanol 95 % setelah larut sempurna, tambahkan etanol 50 % secukupnya hingga 250,0 ml 3. Jingga metil Larutkan jingga metil P 0,04 % b/v dalam etanol 20 % 4. BTB Larutkan 100 mg biru brom timol P dengan 3,2 ml Natrium Hidroksida 0,05 N dan 5 ml etanol 90 % ,setelah larut sempurna tambahkan etanol 20 % secukupnya hingga 250,0 ml. 5. MUREXIDE Haluskan 100 mg serbuk murexide dengan 10 gram KNO3 atau 10 gram NaCl . Pada pemakaiannya 100 gram serbuk murexide tiap volume 150 sampai 200 ml. 6. Larutan indicator Fenolftalein 0,035 %. Timbang ± 0,035 gram Fenolftalein ,lar

LARUTAN PADA KIMIA ANALITIK KUANTITATIF

LARUTAN PADA KIMIA ANALITIK KUANTITATIF 1.        LARUTAN NaOH 0,1  N                 4 gram NaOH dalam 1 Liter 2.        LARUTAN HCl 0,1 N HCl pekat = 37% HCl pekat = 12 M = 12 N                 8,33 mL HCl pekat = 1 Liter 0,1 N 3.        LARUTAN H 2 SO 4 0,1 N H 2 SO 4 pekat = 96 % H 2 SO 4 pekat = 17,63 M = 18 M = 36 N        2,78 mL H 2 SO 4 pekat = 1 liter 0,1 N 4.        LARUTAN CH 3 COOH 0,1 N CH 3 COOH pekat = 99,5 % CH 3 COOH pekat = 17 M = 17 N        5,88 mL CH 3 COOHpekat = 1 liter 0,1 N 5.        LARUTAN Na 2 S 2 O 3 0,1 N             26 gram Na 2 S 2 O 3 dengan 0,2   g Na 2 CO 3 dilarutkan dalam air bebas CO 2 segar sampai volume 1000 ml 6.        LARUTAN KIO 3 0,1 N             3 , 5 g KIO 3 encerkan dengan air hingga 1000 m L 7.        LARUTAN KMnO 4 0,1 N      3,3 gram Kalium Permanganat P adat dilarutkan dalan air hingga 1000 ml 8.        LARUTAN IODIUM (I 2 ) 0,1 N 12,69 gram I 2 P adat ke dalam la

C++ #03 Mengenal Fungsi Input dan Output

Belajar C++ #03: Mengenal Fungsi Input dan Output pada C++ #  C++ Pada dasarnya, program komputer hanya terdiri dari tiga bagian: Input  adalah sesuatu data yang kita masukan ke dalam program. Input biasanya diambil dari perangakat inputan seperti keyboard, mouse, kamera, microphone, dll. Proses  adalah langkah-langkah yang harus dilakukan program untuk menghasilkan output. Output  adalah informasi yang dihasilkan setelah dilakukan proses. Output biasanya ditampilkan ke layar komputer. Pada bahasa pemrograman C++, terdapat beberapa fungsi dasar untuk menampilkan output dan mengambil input. Apa saja itu? Mari kita bahas… Fungsi Output pada C++ C++ memiliki empat fungsi dasar untuk menampilkan output: cout  untuk menampilkan teks ke layar; cerr  untuk menampilkan error; clog  untuk menampilkan log; printf()  untuk menampilkan output, fungsi ini dari C; Kita akan fokus memabahas yang dua saja, yakni  cout  dan  printf() . Soalnya  cerr  dan  clog