Menu
CoddyTech

Penimpaan method

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 38 dari 110.

Method overriding terjadi saat child class menyediakan implementasinya sendiri untuk method yang sudah ada di parent class. Ini memungkinkan subclass menyesuaikan perilaku yang diwarisi sambil mempertahankan signature method yang sama.

Saat kamu mendefinisikan method di child class dengan nama dan parameter yang sama seperti di parent, versi milik child akan mengambil alih:

class Animal {
  String name;
  
  Animal(this.name);
  
  void speak() {
    print('$name makes a sound');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  void speak() {
    print('$name barks: Woof!');
  }
}

void main() {
  var animal = Animal('Generic');
  var dog = Dog('Buddy');
  
  animal.speak();  // Generic mengeluarkan suara
  dog.speak();     // Buddy menggonggong: Woof!
}

Ketika kamu memanggil speak() pada instance Dog, Dart menjalankan versi milik Dog, bukan milik Animal. Class anak telah meng-override method milik induknya.

Kamu juga bisa menggabungkan overriding dengan super untuk memperluas perilaku parent, bukan menggantikannya:

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void speak() {
    super.speak();  // Panggil versi class induk terlebih dahulu
    print('$name also purrs');
  }
}

Pola ini memungkinkan kamu membangun fungsionalitas berdasarkan fungsionalitas yang sudah ada. Aturan utamanya sederhana: method dengan nama dan parameter yang sama di child class menggantikan implementasi milik parent saat dipanggil pada instance child.

challenge icon

Tantangan

Mudah

Mari buat sistem notifikasi yang menunjukkan cara class turunan dapat mengganti method parent untuk menyesuaikan perilaku. Kamu akan membuat beberapa jenis notifikasi yang masing-masing menyampaikan pesan dengan cara unik.

Kamu akan mengatur kodemu dalam dua file:

  • notification.dart: Definisikan hierarki notifikasimu di sini:
    • Class Notification (parent) dengan String title dan String message. Sertakan constructor yang menerima kedua nilai dan method send() yang mencetak Notification: [title] - [message]
    • Class EmailNotification yang memperluas Notification dan menambahkan property String recipient. Ganti method send() agar mencetak Sending email to [recipient]: [title] - [message]
    • Class PushNotification yang memperluas Notification dan menambahkan property String deviceId. Ganti method send() agar terlebih dahulu memanggil send() milik parent menggunakan super, lalu mencetak Pushed to device: [deviceId] pada baris berikutnya
  • main.dart: Impor file notifikasimu dan tunjukkan cara kerja penggantian method:
    • Buat Notification dasar dengan judul 'Alert' dan pesan 'System update available'
    • Panggil method send() miliknya
    • Cetak baris kosong
    • Buat EmailNotification dengan judul 'Welcome', pesan 'Thanks for signing up!', dan penerima 'user@example.com'
    • Panggil method send() miliknya
    • Cetak baris kosong
    • Buat PushNotification dengan judul 'Reminder', pesan 'Meeting in 10 minutes', dan deviceId 'DEVICE-001'
    • Panggil method send() miliknya

Perhatikan cara EmailNotification sepenuhnya menggantikan perilaku parent, sedangkan PushNotification memperluasnya dengan terlebih dahulu memanggil super.send(). Kedua cara ini valid untuk mengganti method, bergantung pada kebutuhanmu.

Output yang diharapkan:

Notification: Alert - System update available

Sending email to user@example.com: Welcome - Thanks for signing up!

Notification: Reminder - Meeting in 10 minutes
Pushed to device: DEVICE-001

Coba sendiri

import 'notification.dart';

void main() {
  // TODO: Buat Notification dasar dengan title 'Alert' dan message 'System update available'
  // Panggil method send() miliknya

  // TODO: Cetak baris kosong

  // TODO: Buat EmailNotification dengan:
  // - title: 'Welcome'
  // - message: 'Thanks for signing up!'
  // - recipient: 'user@example.com'
  // Panggil method send() miliknya

  // TODO: Cetak baris kosong

  // TODO: Buat PushNotification dengan:
  // - title: 'Reminder'
  // - message: 'Meeting in 10 minutes'
  // - deviceId: 'DEVICE-001'
  // Panggil method send() miliknya
}
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 Dart online