Menu
CoddyTech

Method Overriding (@Override)

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

Method overriding memungkinkan subclass menyediakan implementasinya sendiri untuk method yang sudah ditentukan di parent class. Dengan cara ini, child class menyesuaikan perilaku yang diwarisi agar sesuai dengan kebutuhan spesifiknya.

Ketika kamu melakukan override pada method, versi subclass sepenuhnya menggantikan versi parent untuk object dari subclass tersebut. Method harus memiliki nama dan parameter yang sama dengan method parent, serta tipe pengembalian yang sama dengan (atau subtipe dari) tipe pengembalian parent:

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

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

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

Anotasi @Override memberi tahu compiler bahwa kamu bermaksud melakukan override pada method induk. Meskipun opsional, anotasi ini sangat disarankan karena compiler akan mendeteksi error jika kamu tidak sengaja salah mengeja nama method atau menggunakan parameter yang salah:

@Override
public void makeSound() { }  // Benar, compiler memverifikasi ini

public void makesound() { }  // Salah ketik! Ini membuat method baru, bukan menimpa method yang ada

Saat kamu memanggil method yang ditimpa, Java menjalankan versi yang dimiliki oleh tipe object sebenarnya:

Dog dog = new Dog();
dog.makeSound();  // output: Woof!

Cat cat = new Cat();
cat.makeSound();  // output: Meow!

Ingat dari pelajaran sebelumnya bahwa kamu dapat menggunakan super.methodName() di dalam method yang ditimpa jika kamu tetap ingin menyertakan perilaku dari induknya bersama kodemu yang baru.

challenge icon

Tantangan

Mudah

Mari kita buat sistem notifikasi yang menunjukkan cara subclass dapat meng-override method parent untuk memberikan perilaku khususnya sendiri. Kamu akan melihat cara anotasi @Override membantu menemukan kesalahan dan cara setiap subclass dapat menyesuaikan method yang diwarisi.

Kamu akan membuat tiga file untuk mengatur kodemu:

  • Notification.java: Buat class parent yang mewakili notifikasi umum. Class ini harus memiliki:
    • Field private untuk message (String)
    • Constructor yang menerima message
    • Method getMessage() yang mengembalikan message
    • Method send() yang mencetak: Sending notification: [message]
  • EmailNotification.java: Buat subclass yang memperluas Notification dan menyesuaikan cara notifikasi dikirim melalui email:
    • Field private untuk alamat email recipient (String)
    • Constructor yang menerima message dan recipient, menggunakan super(message) untuk bagian parent
    • Override method send() menggunakan anotasi @Override untuk mencetak: Emailing [recipient]: [message]
  • Main.java: Tunjukkan cara nama method yang sama menghasilkan perilaku berbeda, bergantung pada tipe object. Kamu akan menerima dua input: message dan alamat email. Buat Notification biasa dan EmailNotification dengan message yang sama, lalu panggil send() pada masing-masing untuk melihat output yang berbeda.

Kamu akan menerima dua input: message (String) dan alamat email recipient (String).

Output-mu harus menampilkan dua baris, pertama dari method send() milik parent, lalu dari versi yang di-override di EmailNotification. Ini menunjukkan cara overriding method memungkinkan subclass mengganti perilaku yang diwarisi dengan implementasinya sendiri.

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca input
        String message = scanner.nextLine();
        String recipient = scanner.nextLine();
        
        // TODO: Buat object Notification dengan message
        
        // TODO: Buat object EmailNotification dengan message dan recipient
        
        // TODO: Panggil send() pada object Notification
        
        // TODO: Panggil send() pada object EmailNotification
    }
}
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