Lompati ke konten utama
Modul 4 · Pelajaran 1 dari 27/14 dalam kursus~15 min
Pelajaran modul (1/2)

Antarmuka

Meskipun kelas abstrak dapat berisi kode yang diimplementasikan sebagian dan bidang instance, antarmuka di Java adalah kontrak perilaku murni. Sebuah antarmuka mendefinisikan apa yang harus dapat dilakukan suatu kelas, tetapi tidak mendefinisikan bagaimana ia melakukannya.

Hal ini memungkinkan pemisahan menyeluruh antara definisi operasi dan implementasi aktualnya.

Mendefinisikan Antarmuka (interface)

Kami menggunakan kata kunci interface. Semua metode yang dideklarasikan dalam antarmuka secara implisit adalah public dan abstract (tidak perlu ditentukan):

Java
interface Drivable {
    void startEngine();
    void stopEngine();
}

Menerapkan Antarmuka (implements)

Sebuah kelas mengimplementasikan antarmuka menggunakan kata kunci implements dan diharuskan menyediakan implementasi (dengan isi) untuk semua metode yang ditentukan:

Java
class Motorcycle implements Drivable {
    @Override
    public void startEngine() {
        System.out.println("Rombo del motore acceso!");
    }

    @Override
    public void stopEngine() {
        System.out.println("Motore spento.");
    }
}

Keuntungan Antarmuka

  1. Pewarisan Berganda: Di Java, sebuah kelas dapat memperluas hanya satu kelas induk (warisan tunggal), namun dapat mengimplementasikan beberapa antarmuka secara bersamaan.
    Java
    class HybridCar implements Drivable, Chargeable { ... }
  2. Decoupling: Anda dapat mendefinisikan variabel menggunakan tipe antarmuka. Objek apa pun yang mengimplementasikan antarmuka tersebut dapat ditugaskan ke variabel tersebut.
    Java
    Drivable vehicle = new Motorcycle();
    vehicle.startEngine();

Konstanta di Antarmuka

Di antarmuka, dimungkinkan untuk mendeklarasikan bidang. Bidang ini secara implisit adalah public static final (artinya konstanta kelas), meskipun Anda tidak menentukan pengubah ini. Oleh karena itu, mereka harus diinisialisasi segera setelah deklarasi:

Java
interface PhysicsConstants {
    double GRAVITY = 9.81; // Implicitly public static final
}

Metode Bawaan (default)

Mulai dari Java 8, dimungkinkan untuk mendefinisikan metode dengan implementasi default di dalam antarmuka menggunakan kata kunci default. Metode ini tidak memaksa kelas pelaksana untuk menimpanya, sehingga memberikan perilaku fallback:

Java
interface Logger {
    void log(String message);

    // Default method with a body
    default void logError(String message) {
        log("ERROR: " + message);
    }
}

Cobalah sendiri

Latihan#java.m4.l1.e1
Upaya: 0Memuat…

Buat antarmuka Flyable dengan metode void fly(). Kemudian implementasikan kelas Bird yang mengimplementasikan Flyable dan mencetak Flying ke layar.

Memuat editor…
Tunjukkan petunjuk

Di Flyable, tulis `void fly();`. Di kelas Bird, implementasikan metode yang menandainya dengan `@Override public void fly() { System.out.println('Flying'); }`.

Solusi tersedia setelah 3 upaya

Latihan#java.m4.l1.e2
Upaya: 0Memuat…

Tentukan antarmuka Drawable dengan metode void draw(). Kemudian implementasikan kelas Rectangle yang mengimplementasikan Drawable dan mencetak Drawing Rectangle.

Memuat editor…
Tunjukkan petunjuk

Tentukan `void draw();` di antarmuka. Di Rectangle, gunakan `@Override public void draw() { System.out.println('Drawing Rectangle'); }`.

Solusi tersedia setelah 3 upaya

Latihan#java.m4.l1.e3
Upaya: 0Memuat…

Lengkapi antarmuka Swimmable dengan mendefinisikan metode void swim(). Kemudian, selesaikan kelas Duck sehingga mengimplementasikan Flyable dan Swimmable, mencetak metode Flying in the fly() dan Swimming in the swim() metode.

Memuat editor…
Tunjukkan petunjuk

Deklarasikan `void swim();` di dalam Swimmable. Deklarasikan `kelas Bebek mengimplementasikan Flyable, Swimmable` dan mengimplementasikan kedua metode untuk mencetak string yang diminta.

Solusi tersedia setelah 3 upaya