Menu
CoddyTech

Default & Static pada Antarmuka

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 37 dari 87.

Awalnya, interface hanya dapat berisi method abstrak tanpa implementasi. Mulai Java 8, interface dapat menyertakan method default dan method static, sehingga menjadi lebih fleksibel.

default method menyediakan implementasi langsung di dalam interface menggunakan kata kunci default. Class yang mengimplementasikan interface akan mewarisi perilaku ini secara otomatis, tetapi bisa menggantinya jika diperlukan:

public interface Drawable {
    void draw();
    
    default void display() {
        System.out.println("Displaying on screen...");
        draw();
    }
}

Class apa pun yang mengimplementasikan Drawable mendapatkan method display() secara gratis. Ini sangat berguna untuk menambahkan method baru ke interface yang sudah ada tanpa merusak class yang sudah mengimplementasikannya.

Static methods dalam interface bekerja seperti static methods dalam class. Static methods tersebut menjadi bagian dari interface itu sendiri dan dipanggil menggunakan nama interface:

public interface MathOperations {
    static int add(int a, int b) {
        return a + b;
    }
}

// Penggunaan
int result = MathOperations.add(5, 3);

Method interface statis tidak dapat ditimpa dan tidak diwarisi oleh class yang mengimplementasikannya. Method ini berguna untuk method utilitas yang berkaitan dengan tujuan interface.

Jika sebuah class mengimplementasikan dua interface dengan signature method default yang sama, class tersebut harus melakukan override terhadap method itu untuk menyelesaikan konflik.

challenge icon

Tantangan

Mudah

Mari buat sistem pesan yang menunjukkan method default dan static pada interface. Kamu akan membuat interface dengan fungsionalitas bawaan yang dapat langsung digunakan atau disesuaikan sesuai kebutuhan oleh class yang mengimplementasikannya.

Kamu akan mengatur kodemu dalam empat file:

  • Messenger.java: Definisikan interface yang mewakili layanan pesan apa pun. Interface ini harus mendeklarasikan method abstrak sendMessage(String message) yang mengembalikan void. Tambahkan method default bernama sendWithTimestamp(String message) yang mencetak: [TIMESTAMP] lalu memanggil sendMessage(message). Sertakan juga method static bernama formatMessage(String message) yang mengembalikan pesan dalam huruf kapital.
  • EmailMessenger.java: Buat class yang mengimplementasikan Messenger. Class ini memiliki field recipient (String). Sertakan constructor untuk menginisialisasi penerima. Implementasikan sendMessage() agar mencetak: Email to [recipient]: [message]. Class ini menggunakan method default sendWithTimestamp() tanpa perubahan.
  • SMSMessenger.java: Buat class lain yang mengimplementasikan Messenger. Class ini memiliki field phoneNumber (String). Sertakan constructor untuk menginisialisasi nomor telepon. Implementasikan sendMessage() agar mencetak: SMS to [phoneNumber]: [message]. Override method default sendWithTimestamp() agar mencetak: [URGENT] lalu memanggil sendMessage(message), bukan menggunakan perilaku timestamp default.
  • Main.java: Gabungkan semuanya untuk menunjukkan method interface default dan static. Kamu akan menerima tiga input: penerima email, nomor telepon, dan pesan. Pertama, gunakan method static Messenger.formatMessage() untuk memformat pesan dan menyimpannya. Lalu buat EmailMessenger dan SMSMessenger. Untuk setiap messenger, panggil sendWithTimestamp() dengan pesan yang sudah diformat: perhatikan bahwa EmailMessenger menggunakan implementasi default, sedangkan SMSMessenger menggunakan versinya yang sudah di-override.

Kamu akan menerima tiga input: penerima email (String), nomor telepon (String), dan pesan (String).

Output-mu harus menampilkan total empat baris, dua untuk setiap messenger: satu baris awalan ([TIMESTAMP] atau [URGENT]) diikuti baris pesan. EmailMessenger akan menampilkan awalan timestamp default, sedangkan SMSMessenger akan menampilkan awalan urgent kustomnya. Keduanya akan menggunakan pesan yang diformat secara static (huruf kapital)!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca input
        String emailRecipient = scanner.nextLine();
        String phoneNumber = scanner.nextLine();
        String message = scanner.nextLine();
        
        // TODO: Gunakan Messenger.formatMessage() untuk memformat pesan dan menyimpannya
        
        // TODO: Buat EmailMessenger dengan alamat email penerima
        
        // TODO: Buat SMSMessenger dengan nomor telepon
        
        // TODO: Panggil sendWithTimestamp() pada EmailMessenger dengan pesan yang telah diformat
        
        // TODO: Panggil sendWithTimestamp() pada SMSMessenger dengan pesan yang telah diformat
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online