Menu
CoddyTech

Method overriding (Saat program berjalan)

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

Overloading method diselesaikan saat kompilasi, sedangkan overriding method menunjukkan polimorfisme saat runtime. Di sini, Java menentukan method mana yang akan dijalankan saat program benar-benar berjalan, berdasarkan tipe aktual object, bukan tipe yang dideklarasikan untuk variabel.

Kamu sudah mempelajari tentang method overriding di bab Inheritance. Yang membuatnya bersifat polimorfik adalah cara Java menanganinya saat reference milik parent menunjuk ke object milik child:

public class Animal {
    public void speak() {
        System.out.println("Some sound");
    }
}

public class Dog extends Animal {
    @Override
    public void speak() {
        System.out.println("Bark!");
    }
}

public class Cat extends Animal {
    @Override
    public void speak() {
        System.out.println("Meow!");
    }
}

Sekarang, amati apa yang terjadi saat kita menggunakan referensi bertipe induk:

Animal myPet = new Dog();
myPet.speak();  // output: Bark!

myPet = new Cat();
myPet.speak();  // output: Meow!

Meskipun myPet dideklarasikan sebagai Animal, Java memanggil method yang telah dioverride berdasarkan tipe object sebenarnya saat program berjalan. Ini disebut dynamic method dispatch. JVM melihat tipe object yang sebenarnya, bukan tipe yang dinyatakan variabel.

Ini memungkinkan pola yang kuat seperti memproses berbagai object secara seragam:

Animal[] pets = {new Dog(), new Cat(), new Dog()};
for (Animal pet : pets) {
    pet.speak();  // Setiap object memanggil versinya sendiri
}

Polimorfisme saat program dijalankan memungkinkan kamu menulis kode fleksibel yang bekerja dengan tipe induk sambil otomatis menggunakan perilaku turunan yang tepat.

challenge icon

Tantangan

Mudah

Mari bangun sistem notifikasi yang menunjukkan polimorfisme saat runtime. Kamu akan membuat hierarki jenis notifikasi dengan pemanggilan method yang sama menghasilkan output berbeda, bergantung pada jenis object sebenarnya saat runtime.

Kamu akan menyusun kodemu dalam empat file:

  • Notification.java: Buat class dasar yang digunakan bersama oleh semua notifikasi. Setiap notifikasi memiliki field recipient (String). Sertakan constructor untuk menginisialisasinya, method getter, dan method send() yang mencetak: Sending notification to [recipient]
  • EmailNotification.java: Buat class yang mewarisi Notification. Notifikasi email menambahkan field subject. Gunakan super untuk inisialisasi induk. Override method send() agar mencetak: Emailing [recipient]: [subject]
  • SMSNotification.java: Buat class lain yang mewarisi Notification. Notifikasi SMS menambahkan field phoneNumber. Override send() agar mencetak: Texting [phoneNumber] for [recipient]
  • Main.java: Di sinilah polimorfisme saat runtime terlihat! Kamu akan menerima tiga input: nama penerima, subjek email, dan nomor telepon. Buat array berisi referensi Notification yang memuat tiga object dalam urutan ini: Notification dasar, EmailNotification, dan SMSNotification (semuanya menggunakan penerima yang sama). Lalu, lakukan perulangan pada array dan panggil send() pada setiap elemennya. Perhatikan bagaimana Java otomatis memanggil versi yang di-override dengan benar berdasarkan jenis sebenarnya dari setiap object!

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

Output-mu harus menampilkan tiga baris. Setiap pemanggilan send() menghasilkan output yang berbeda, meskipun kamu memanggil method yang sama pada referensi Notification. Itulah cara kerja dispatch method dinamis!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca input
        String recipient = scanner.nextLine();
        String subject = scanner.nextLine();
        String phoneNumber = scanner.nextLine();
        
        // TODO: Buat array berisi referensi Notification dengan 3 elemen
        // Array tersebut harus berisi, sesuai urutan ini:
        // 1. object Notification dasar
        // 2. object EmailNotification
        // 3. object SMSNotification
        // Semuanya menggunakan penerima yang sama
        
        // TODO: Lakukan perulangan pada array dan panggil send() untuk setiap elemen
        // Ini menunjukkan polimorfisme saat program berjalan!
    }
}
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