Kata Kunci super
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 37 dari 110.
Kata kunci super memberi child class akses langsung ke parent class-nya. Kamu sudah melihatnya di constructor dengan super(name), tetapi kata kunci ini juga berguna dalam konteks lain.
Saat kamu perlu memanggil constructor milik parent, super meneruskan argumen ke atas rantai inheritance:
class Vehicle {
String brand;
int year;
Vehicle(this.brand, this.year);
}
class Car extends Vehicle {
int doors;
Car(String brand, int year, this.doors) : super(brand, year);
}Kata kunci super juga memungkinkan kamu mengakses method dan property parent dari dalam class child. Ini sangat berguna saat kamu ingin menggunakan perilaku parent bersama perilakumu sendiri:
class Animal {
String name;
Animal(this.name);
void makeSound() {
print('$name makes a sound');
}
}
class Cat extends Animal {
Cat(String name) : super(name);
void makeSound() {
super.makeSound(); // Panggil method class induk terlebih dahulu
print('$name says meow!');
}
}Saat kamu memanggil super.makeSound(), kamu secara eksplisit memanggil versi method milik induknya. Tanpa super, memanggil makeSound() akan merujuk ke method milik class saat ini, yang berpotensi menyebabkan rekursi tanpa batas.
Anggap super berarti "gunakan versi milik indukku", baik itu constructor, method, maupun property.
Tantangan
MudahMari kita buat sistem pesan yang menunjukkan cara kata kunci super memungkinkan class turunan mengakses dan memperluas perilaku induknya. Kamu akan membuat hierarki tempat berbagai jenis pesan dibangun berdasarkan class pesan dasar.
Kamu akan mengatur kodemu ke dalam dua file:
message.dart: Definisikan class pesanmu di sini:- Class
Message(induk) denganString senderdanString content. Sertakan constructor yang menerima kedua nilai tersebut dan methoddisplay()yang mencetakFrom [sender]: [content] - Class
UrgentMessageyang memperluasMessage. Class ini harus memiliki propertyString prioritytambahan. Constructor menerima sender, content, dan priority, lalu meneruskan dua nilai pertama ke induknya menggunakansuper. Override methoddisplay()untuk terlebih dahulu memanggil versi induknya menggunakansuper.display(), lalu mencetakPriority: [priority]pada baris berikutnya
- Class
main.dart: Impor file pesanmu dan tunjukkan cara kerjasuperdalam constructor dan method:- Buat
Messagebiasa dari'Alice'dengan konten'Hello there!' - Panggil method
display()miliknya - Cetak baris kosong sebagai pemisah
- Buat
UrgentMessagedari'Bob'dengan konten'Server is down!'dan priority'HIGH' - Panggil method
display()miliknya
- Buat
Perhatikan cara UrgentMessage menggunakan super dalam dua cara: di constructor untuk meneruskan data ke induknya, dan di method yang dioverride untuk menyertakan output induknya sebelum menambahkan outputnya sendiri.
Output yang diharapkan:
From Alice: Hello there!
From Bob: Server is down!
Priority: HIGHCoba sendiri
import 'message.dart';
void main() {
// TODO: Buat Message biasa dari 'Alice' dengan konten 'Hello there!'
// TODO: Panggil method display() pada pesan tersebut
// TODO: Cetak baris kosong sebagai pemisah
// TODO: Buat UrgentMessage dari 'Bob' dengan konten 'Server is down!' dan prioritas 'HIGH'
// TODO: Panggil method display() pada pesan mendesak tersebut
}
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