Menu
CoddyTech

Anotasi @override

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 39 dari 110.

Anotasi @override adalah penanda praktik terbaik yang memberi tahu Dart (dan developer lain) bahwa kamu sengaja mengganti method dari class induk. Meskipun method overriding tetap berfungsi tanpanya, menggunakan @override memberikan lapisan keamanan yang penting.

class Animal {
  String name;
  
  Animal(this.name);
  
  void speak() {
    print('$name makes a sound');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  @override
  void speak() {
    print('$name barks: Woof!');
  }
}

Anotasi ini memberikan dua manfaat utama. Pertama, anotasi ini mendokumentasikan tujuanmu dengan jelas, siapa pun yang membaca kode akan langsung tahu bahwa method ini ada di class induk. Kedua, analyzer Dart akan memberi peringatan jika method induk sebenarnya tidak ada, sehingga kesalahan ketik dan kesalahan saat melakukan refactoring dapat diketahui lebih awal.

Pertimbangkan apa yang terjadi jika kamu salah mengeja nama method tanpa @override:

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void speek() {  // Salah ketik! Tidak ada peringatan tanpa @override
    print('$name meows');
  }
}

Tanpa anotasi, Dart menganggap kamu sedang membuat method baru bernama speek(). Dengan @override, analyzer akan langsung menandai bahwa method seperti itu tidak ada di class induk. Anotasi sederhana ini mencegah bug terselubung yang mungkin sulit dilacak nanti.

challenge icon

Tantangan

Mudah

Mari bangun sistem pemutar media yang menunjukkan pentingnya anotasi @override saat menyesuaikan perilaku yang diwariskan. Kamu akan membuat berbagai tipe media yang masing-masing memutar konten dengan caranya sendiri.

Kamu akan mengatur kodemu dalam dua file:

  • media.dart: Definisikan hierarki media di sini:
    • class Media dengan property String title, konstruktor yang menerima title, dan method play() yang mencetak Playing: [title]
    • class Song yang memperluas Media dan menambahkan property String artist. Gunakan anotasi @override dan override play() untuk mencetak Playing song: [title] by [artist]
    • class Video yang memperluas Media dan menambahkan property int duration (dalam detik). Gunakan @override dan override play() untuk terlebih dahulu memanggil versi milik parent dengan super.play(), lalu mencetak Duration: [duration] seconds
  • main.dart: Impor file media-mu dan tunjukkan method yang dioverride:
    • Buat object Media dengan title 'Generic Content' dan panggil play()
    • Cetak satu baris kosong
    • Buat Song dengan title 'Imagine' dan artist 'John Lennon', lalu panggil play()
    • Cetak satu baris kosong
    • Buat Video dengan title 'Dart Tutorial' dan duration 360, lalu panggil play()

Anotasi @override mendokumentasikan maksudmu dan membantu menemukan error. Jika kamu tidak sengaja salah mengeja play() menjadi plya(), anotasi tersebut akan memberi tahu bahwa method seperti itu tidak ada di parent class.

Output yang diharapkan:

Playing: Generic Content

Playing song: Imagine by John Lennon

Playing: Dart Tutorial
Duration: 360 seconds

Coba sendiri

import 'media.dart';

void main() {
  // TODO: Buat object Media dengan judul 'Generic Content', lalu panggil play()
  
  
  // TODO: Cetak satu baris kosong
  
  
  // TODO: Buat Song dengan judul 'Imagine' dan artis 'John Lennon', lalu panggil play()
  
  
  // TODO: Cetak satu baris kosong
  
  
  // TODO: Buat Video dengan judul 'Dart Tutorial' dan durasi 360, lalu panggil play()
  
}
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