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.
Tantangan
MudahMari 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) denganString titledanString message. Sertakan constructor yang menerima kedua nilai dan methodsend()yang mencetakNotification: [title] - [message] - Class
EmailNotificationyang memperluasNotificationdan menambahkan propertyString recipient. Ganti methodsend()agar mencetakSending email to [recipient]: [title] - [message] - Class
PushNotificationyang memperluasNotificationdan menambahkan propertyString deviceId. Ganti methodsend()agar terlebih dahulu memanggilsend()milik parent menggunakansuper, lalu mencetakPushed to device: [deviceId]pada baris berikutnya
- Class
main.dart: Impor file notifikasimu dan tunjukkan cara kerja penggantian method:- Buat
Notificationdasar dengan judul'Alert'dan pesan'System update available' - Panggil method
send()miliknya - Cetak baris kosong
- Buat
EmailNotificationdengan judul'Welcome', pesan'Thanks for signing up!', dan penerima'user@example.com' - Panggil method
send()miliknya - Cetak baris kosong
- Buat
PushNotificationdengan judul'Reminder', pesan'Meeting in 10 minutes', dan deviceId'DEVICE-001' - Panggil method
send()miliknya
- Buat
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-001Coba 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
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online