Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 Product dengan property String name dan double price, konstruktor yang menerima kedua nilai, dan method info() yang mencetak [name]: $[price]
    • Class Book yang memperluas Product dan menambahkan property String author. Gunakan parameter super untuk meneruskan name dan price ke konstruktor induk
    • Class Electronics yang memperluas Product dan menambahkan property int warranty (dalam bulan). Gunakan pemanggilan super() tradisional di daftar inisialisasi untuk meneruskan nilai ke induk
  • main.dart: Impor file produkmu dan tunjukkan kedua pendekatan pewarisan konstruktor:
    • Buat Book dengan nama 'Dart Essentials', harga 29.99, dan penulis 'Jane Smith'
    • Panggil method info()-nya, lalu cetak Author: [author]
    • Cetak satu baris kosong
    • Buat Electronics dengan nama 'Wireless Mouse', harga 45.50, dan garansi 24
    • Panggil method info()-nya, lalu cetak Warranty: [warranty] months

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 months

Coba 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"
}
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