Menu
Coddy logo textTech

@override Açıklaması

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 39 / 110.

@override ek açıklaması, Dart'a (ve diğer geliştiricilere) bir üst sınıftaki metodu kasıtlı olarak geçersiz kıldığını söyleyen bir en iyi uygulama işaretleyicisidir. Metot geçersiz kılma işlemi bu ek açıklama olmadan da çalışsa da @override kullanmak önemli bir güvenlik katmanı ekler.

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!');
  }
}

Açıklama iki temel fayda sağlar. İlk olarak, niyetinizi açıkça belgelemeye yardımcı olur; kodu okuyan herkes bu metodun üst sınıfta bulunduğunu hemen anlar. İkinci olarak, üst sınıftaki metodun gerçekten var olmaması durumunda Dart analizcisi sizi uyararak yazım hatalarını ve yeniden düzenleme hatalarını erkenden yakalar.

@override olmadan yöntem adını yanlış yazarsanız ne olacağını düşünün:

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void speek() {  // Yazım hatası! @override olmadan uyarı yok
    print('$name meows');
  }
}

Açıklama olmadan Dart, speek() adlı yeni bir yöntem oluşturduğunuzu varsayar. @override kullanıldığında analiz aracı, üst sınıfta böyle bir yöntemin bulunmadığını hemen bildirir. Bu basit açıklama, daha sonra izini sürmenin zor olabileceği ince hataları önler.

challenge icon

Görev

Kolay

Devralınan davranışı özelleştirirken @override ek açıklamasının önemini gösteren bir medya oynatıcı sistemi oluşturalım. Her biri içeriği kendi yöntemleriyle oynatan farklı medya türleri oluşturacaksın.

Kodunu iki dosyada düzenleyeceksin:

  • media.dart: Medya hiyerarşini burada tanımla:
    • Media özelliğine sahip bir String title sınıfı, başlığı alan bir oluşturucu ve play() yazdıran bir Playing: [title] yöntemi
    • Song sınıfını genişleten ve Media özelliği ekleyen bir String artist sınıfı. @override ek açıklamasını kullan ve play() yöntemini geçersiz kılarak Playing song: [title] by [artist] yazdır
    • Video sınıfını genişleten ve Media özelliği (saniye cinsinden) ekleyen bir int duration sınıfı. @override kullan ve play() yöntemini geçersiz kılarak önce super.play() ile üst sınıfın sürümünü çağır, ardından Duration: [duration] seconds yazdır
  • main.dart: Medya dosyanı içe aktar ve geçersiz kılınan yöntemleri göster:
    • Media başlığına sahip bir 'Generic Content' nesnesi oluştur ve play() yöntemini çağır
    • Boş bir satır yazdır
    • Song başlığına ve 'Imagine' sanatçı adına sahip bir 'John Lennon' oluştur, ardından play() yöntemini çağır
    • Boş bir satır yazdır
    • Video başlığına ve 'Dart Tutorial' süresine sahip bir 360 oluştur, ardından play() yöntemini çağır

@override ek açıklaması amacını belgeler ve hataları yakalamana yardımcı olur. Yanlışlıkla play() yöntemini plya() olarak yazarsan, ek açıklama üst sınıfta böyle bir yöntemin bulunmadığı konusunda seni uyarır.

Beklenen çıktı:

Playing: Generic Content

Playing song: Imagine by John Lennon

Playing: Dart Tutorial
Duration: 360 seconds

Kendin dene

import 'media.dart';

void main() {
  // TODO: Create a Media object with title 'Generic Content' and call play()
  
  
  // TODO: Boş bir satır yazdır
  
  
  // TODO: title 'Imagine' ve artist 'John Lennon' ile bir Song oluştur, sonra play() çağır
  
  
  // TODO: Boş bir satır yazdır
  
  
  // TODO: Create a Video with title 'Dart Tutorial' and duration 360, then call play()
  
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi