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.
Tantangan
MudahMari 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 abstraksendMessage(String message)yang mengembalikan void. Tambahkan method default bernamasendWithTimestamp(String message)yang mencetak:[TIMESTAMP]lalu memanggilsendMessage(message). Sertakan juga method static bernamaformatMessage(String message)yang mengembalikan pesan dalam huruf kapital.EmailMessenger.java: Buat class yang mengimplementasikanMessenger. Class ini memiliki fieldrecipient(String). Sertakan constructor untuk menginisialisasi penerima. ImplementasikansendMessage()agar mencetak:Email to [recipient]: [message]. Class ini menggunakan method defaultsendWithTimestamp()tanpa perubahan.SMSMessenger.java: Buat class lain yang mengimplementasikanMessenger. Class ini memiliki fieldphoneNumber(String). Sertakan constructor untuk menginisialisasi nomor telepon. ImplementasikansendMessage()agar mencetak:SMS to [phoneNumber]: [message]. Override method defaultsendWithTimestamp()agar mencetak:[URGENT]lalu memanggilsendMessage(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 staticMessenger.formatMessage()untuk memformat pesan dan menyimpannya. Lalu buat EmailMessenger dan SMSMessenger. Untuk setiap messenger, panggilsendWithTimestamp()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
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online