Java - Interfaces

Selamat datang, para pemrogram muda! Hari ini, kita akan menyelam ke dunia yang menarik dari Java Interfaces. Jangan khawatir jika kamu baru mengenal programming; saya akan memandu kamu melalui konsep ini langkah demi langkah, sama seperti yang saya lakukan untuk banyak mahasiswa selama tahun-tahun pengajaran saya. Jadi, ambil minuman favoritmu, rasakan dirumah, dan mari kita mulai perjalanan yang menarik ini bersama-sama!

Java - Interfaces

Apa itu Java Interface?

Bayangkan jika kamu sedang membangun sebuah robot (tunggu, analogi ini akan masuk akal segera!). Kamu tahu bahwa kamu ingin robotmu melakukan hal-hal tertentu, seperti bergerak dan membuat suara, tetapi kamu tidak yakin secara spesifik bagaimana ia akan melakukan hal-hal ini. Di Java, sebuah interface adalah seperti rancangan untuk robotmu. Itu mendefinisikan apa yang robotmu harus dapat lakukan, tanpa menentukan bagaimana ia akan melakukan hal-hal ini.

Dalam istilah pemrograman, sebuah interface adalah kontrak yang menentukan satu set metode abstrak yang harus diimplementasikan oleh sebuah kelas. Itu adalah cara untuk mencapai abstraksi dan mendefinisikan perilaku umum yang dapat dibagi oleh beberapa kelas.

Mendeklarasikan Interface di Java

Mari kita mulai dengan contoh sederhana. Ini adalah bagaimana kita mendeklarasikan sebuah interface:

public interface Robot {
void move();
void makeSound();
}

Dalam contoh ini, kita telah mendeklarasikan sebuah interface yang dipanggil Robot dengan dua metode abstrak: move() dan makeSound(). Perhatikan bahwa metode ini tidak memiliki tubuh - mereka hanya deklarasi. Kepada kelas yang mengimplementasikan interface ini untuk menyediakan kode aktual untuk metode ini.

Properti dari Java Interfaces

Sebelum kita melanjutkan, mari kita ringkasan beberapa properti utama dari Java interfaces:

  1. Semua metode di dalam sebuah interface secara implisit adalah publik dan abstrak.
  2. Interfaces tidak dapat diinstansiasi secara langsung.
  3. Sebuah interface dapat mengextend beberapa interface.
  4. Variabel di dalam sebuah interface secara implisit adalah publik, statik, dan final.

Mengimplementasikan Interfaces di Java

Sekarang kita memiliki interface Robot kita, mari kita buat sebuah kelas yang mengimplementasikannya. Kita akan menyebut kelas ini AndroidRobot:

public class AndroidRobot implements Robot {
@Override
public void move() {
System.out.println("Android robot is walking on two legs.");
}

@Override
public void makeSound() {
System.out.println("Android robot says: 'Hello, human!'");
}
}

Di sini, kita telah menggunakan kata kunci implements untuk menunjukkan bahwa kelas AndroidRobot kita adalah mengimplementasikan interface Robot. Kita then menyediakan implementasi untuk kedua metode move() dan makeSound().

Mari kita pecahkan ini:

  1. Anotasi @Override adalah opsional tetapi dianjurkan. Itu memberitahu kompiler bahwa kita secara sadar mengganti metode dari interface.
  2. Kita telah memberikan implementasi spesifik untuk move() dan makeSound(). Robot Android kita berjalan dengan dua kaki dan dapat mengatakan halo!

Menggunakan Interface dan Kelas Kita

Sekarang, mari kita lihat bagaimana kita dapat menggunakan interface dan kelas baru kita:

public class RobotDemo {
public static void main(String[] args) {
Robot myRobot = new AndroidRobot();
myRobot.move();
myRobot.makeSound();
}
}

Ketika kita menjalankan kode ini, kita akan lihat:

Android robot is walking on two legs.
Android robot says: 'Hello, human!'

Perhatikan bagaimana kita mendeklarasikan myRobot sebagai jenis Robot (interface) tetapi menginstansinya sebagai AndroidRobot. Ini adalah fitur yang kuat dari interfaces - kita dapat memrogram ke interface, bukan implementasi. Ini membuat kode kita lebih fleksibel dan lebih mudah untuk diubah di masa depan.

Mengextend Java Interfaces

Seperti kelas, interfaces dapat mengextend interface lain. Ini memungkinkan kita untuk membuat interface yang lebih spesialis. Mari kita buat sebuah interface robot yang lebih advance:

public interface AdvancedRobot extends Robot {
void fly();
void swim();
}

Setiap kelas yang mengimplementasikan AdvancedRobot harus menyediakan implementasi untuk move(), makeSound(), fly(), dan swim().

warisan Berganda dengan Interfaces

Tidak seperti kelas, yang hanya dapat mengextend satu superclass, sebuah interface dapat mengextend beberapa interface. Ini adalah satu cara Java menyediakan bentuk dari warisan berganda. Ini adalah contoh:

public interface Flying {
void takeOff();
void land();
}

public interface Swimming {
void dive();
void surface();
}

public interface AmphibiousRobot extends Robot, Flying, Swimming {
void transformMode();
}

Sebuah kelas yang mengimplementasikan AmphibiousRobot harus menyediakan implementasi untuk semua metode dari Robot, Flying, Swimming, dan AmphibiousRobot.

Metode Default di Interfaces

Sejak Java 8, interfaces dapat memiliki metode default - metode dengan implementasi default. Fitur ini dikenalkan untuk memungkinkan menambahkan metode baru ke interfaces tanpa memecahkan implementasi yang ada. Ini adalah contoh:

public interface ModernRobot {
void process();

default void boot() {
System.out.println("Booting up...");
process();
System.out.println("Boot complete!");
}
}

Kelas yang mengimplementasikan ModernRobot harus mengimplementasikan process(), tetapi mereka mendapat boot() secara gratis. Mereka dapat mengganti boot() jika mereka mau, tetapi mereka tidak harus.

Functional Interfaces

Sebuah functional interface adalah interface yang berisi tepat satu metode abstrak. Ini penting untuk lambda expressions di Java. Ini adalah contoh:

@FunctionalInterface
public interface Calculator {
int calculate(int a, int b);
}

Kita dapat menggunakan interface ini dengan lambda expression seperti ini:

Calculator add = (a, b) -> a + b;
System.out.println(add.calculate(5, 3));  // Output: 8

Kesimpulan

Whew! Kita telah meliputi banyak lahan hari ini. Dari deklarasi interface dasar ke functional interfaces, kamu sekarang memiliki dasar yang solid di Java interfaces. Ingat, interfaces adalah alat yang kuat dalam pemrograman Java. Mereka memungkinkan kita untuk mendefinisikan perilaku umum, mencapai bentuk dari warisan berganda, dan menulis kode yang lebih fleksibel dan mudah dipelihara.

Sebagai kamu melanjutkan perjalanan Java kamu, kamu akan menemukan interfaces muncul di mana-mana. Mereka digunakan secara luas dalam pustaka standar Java dan banyak pola desain. Jadi terus latihan, dan segera kamu akan berinterfacing seperti pro!

Selamat coding, para pemimpin Java masa depan! ??‍??‍?

Credits: Image by storyset