Konstruktor dan Pewarisan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 41 dari 110.
Saat child class memperluas parent, constructor parent harus dipanggil agar field yang diwarisi dapat diinisialisasi dengan benar. Dart menyediakan cara yang fleksibel untuk menanganinya melalui daftar initializer menggunakan super.
Jika parent memiliki constructor berparameter, child harus memanggilnya secara eksplisit:
class Person {
String name;
int age;
Person(this.name, this.age);
}
class Student extends Person {
String school;
Student(String name, int age, this.school) : super(name, age);
}Dart 2.17 memperkenalkan parameter super, sintaks yang lebih sederhana untuk meneruskan parameter langsung ke konstruktor induk:
class Student extends Person {
String school;
// super.name dan super.age diteruskan langsung ke konstruktor Person
Student(super.name, super.age, this.school);
}Saat menggunakan konstruktor bernama, kamu menentukan konstruktor induk yang akan dipanggil:
class Employee extends Person {
String department;
Employee(super.name, super.age, this.department);
Employee.intern(String name, this.department) : super(name, 18);
}Aturan utamanya sederhana: parent harus diinisialisasi sepenuhnya sebelum child menambahkan property-nya sendiri. Baik kamu menggunakan pemanggilan super() tradisional maupun parameter super yang lebih baru, Dart memastikan rantai pewarisan dibangun dengan benar dari parent ke child.
Tantangan
MudahMari buat sistem inventaris produk yang menunjukkan cara kerja konstruktor dengan pewarisan. Kamu akan membuat hierarki yang berisi berbagai jenis produk yang memperluas class produk dasar, masing-masing memerlukan inisialisasi yang tepat melalui konstruktor induk.
Kamu akan menyusun kodemu ke dalam dua file:
product.dart: Definisikan hierarki produk di sini:- Class
Productdengan propertyString namedandouble price, konstruktor yang menerima kedua nilai, dan methodinfo()yang mencetak[name]: $[price] - Class
Bookyang memperluasProductdan menambahkan propertyString author. Gunakan parameter super untuk meneruskannamedanpriceke konstruktor induk - Class
Electronicsyang memperluasProductdan menambahkan propertyint warranty(dalam bulan). Gunakan pemanggilansuper()tradisional di daftar inisialisasi untuk meneruskan nilai ke induk
- Class
main.dart: Impor file produkmu dan tunjukkan kedua pendekatan pewarisan konstruktor:- Buat
Bookdengan nama'Dart Essentials', harga29.99, dan penulis'Jane Smith' - Panggil method
info()-nya, lalu cetakAuthor: [author] - Cetak satu baris kosong
- Buat
Electronicsdengan nama'Wireless Mouse', harga45.50, dan garansi24 - Panggil method
info()-nya, lalu cetakWarranty: [warranty] months
- Buat
Kedua class turunan mewarisi method info() dari Product tanpa perlu menimpanya. Perbedaan utamanya terletak pada cara mereka memanggil konstruktor induk: Book menggunakan sintaks parameter super yang lebih sederhana, sedangkan Electronics menggunakan pendekatan tradisional dengan super() di daftar inisialisasi.
Output yang diharapkan:
Dart Essentials: $29.99
Author: Jane Smith
Wireless Mouse: $45.5
Warranty: 24 monthsCoba sendiri
import 'product.dart';
void main() {
// TODO: Buat Book dengan:
// - name: 'Dart Essentials'
// - price: 29.99
// - author: 'Jane Smith'
// TODO: Panggil method info() milik book
// TODO: Cetak "Author: [author]"
// TODO: Cetak satu baris kosong
// TODO: Buat Electronics dengan:
// - name: 'Wireless Mouse'
// - price: 45.50
// - warranty: 24
// TODO: Panggil method info() milik electronics
// TODO: Cetak "Warranty: [warranty] months"
}
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