Konsep Java OOP – INTERFACE

PENGERTIAN INTERFACE

Interface terdiri dari inter = antar, face = muka. Jadi Interface adalah antarmuka

Secara umum Interface berfungsi sebagai penghubung antar sesuatu yang ‘abstrak’dengan sesuatu yang nyata.

Hal Yang Perlu Diketahui Dalam Interface

Tujuan utama dari interface ini adalah untuk menetapkan perilaku umum dari suatu class yang terkait ataupun tidak terkait.

Interface juga tidak bisa mengimplementasikan method, melainkan hanya berisi signature yaitu nama, parameter, dan exceptions dari method.

Penting untuk membedakan interface dengan class pada Java.

Kesamaan antar Interface dan Class

Berikut adalah kesamaan antara sebuah Interface dalam Program java :

  1. Interface bisa memiliki jumlah method sebanyak apapun
  2. Sebuah interface di tulis dengan menggunakan ekstensi .java dan nama interface itu sesuai dengan nama dari file.
  3. Kode byte dari interface itu terdapat di file .class
  4. Interface terdapat di packages dan kode byte yang berkaitan harus ada di struktur direktori di mana sesuai dengan nama dari package.

Perbedaan Antar Interface dan Class

Di bawah ini adalah perbedaan Interface dan Class pada program Java :

  1. Interface tidak didapat di instance-kan
  2. Tidak memiliki konstruktor apapun
  3. Semua method yang dimiliki oleh interface adalah method abstract
  4. Interface tidak bisa mengandung fields instance. Fields yang terdapat pada interface haruslah dideklarasikan sebagai static dan final.
  5. Interface bisa extend ke beberapa interface (multiple)

Hal – Hal yang tidak boleh dilakukan di Interface

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

  1. Jangan buat variabel di dalam interface, tapi membuat konstanta boleh;
  2. Jangan mengisi method-nya, cukup tuliskan nama method, tipe data, dan parameter saja. Tapi untuk default metod boleh punya isi.
  3. Jangan berikan modifier privete atauapun protected pada method dan konstanta yang ada di dalam interface.
  4. Interface tidak bisa dibuat objek instance-nya dengan kata kunci new.

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 juga mengamalkan prinsip Abstraksi dan Enkapsulasi (pembungkusan).

Membuat Contoh Program Interface

  1. 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:

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 MEMAKAI 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.

Referensi :

https://ndoware.com/paradigma-pemrograman.html/embed#?secret=6aJieVawvS

https://blog.devhoz.com/pegertian-serta-macam-macam-paradigma-pemrograman/embed/#?secret=yGNxTFiv5m

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create your website with WordPress.com
Get started
%d bloggers like this: