Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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) dengan String sender dan String content. Sertakan constructor yang menerima kedua nilai tersebut dan method display() yang mencetak From [sender]: [content]
    • Class UrgentMessage yang memperluas Message. Class ini harus memiliki property String priority tambahan. Constructor menerima sender, content, dan priority, lalu meneruskan dua nilai pertama ke induknya menggunakan super. Override method display() untuk terlebih dahulu memanggil versi induknya menggunakan super.display(), lalu mencetak Priority: [priority] pada baris berikutnya
  • main.dart: Impor file pesanmu dan tunjukkan cara kerja super dalam constructor dan method:
    • Buat Message biasa dari 'Alice' dengan konten 'Hello there!'
    • Panggil method display() miliknya
    • Cetak baris kosong sebagai pemisah
    • Buat UrgentMessage dari 'Bob' dengan konten 'Server is down!' dan priority 'HIGH'
    • Panggil method display() miliknya

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: HIGH

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