Menu
Coddy logo textTech

Metot Geçersiz Kılma

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

Metot geçersiz kılma, bir alt sınıfın üst sınıfta zaten bulunan bir metodun kendi uygulamasını sağlamasıyla gerçekleşir. Bu, alt sınıfların aynı metot imzasını korurken devralınan davranışı özelleştirmesine olanak tanır.

Bir alt sınıfta, üst sınıftakiyle aynı ada ve parametrelere sahip bir metot tanımladığınızda, alt sınıfın sürümü devreye girer:

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

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

void main() {
  var animal = Animal('Generic');
  var dog = Dog('Buddy');
  
  animal.speak();  // Generic bir ses çıkarır
  dog.speak();     // Buddy havlar: Woof!
}

Bir Dog örneği üzerinde speak() çağırdığınızda Dart, Animal'ın sürümünü değil, Dog'un sürümünü çalıştırır. Alt sınıf, üst sınıfın metodunu geçersiz kılmıştır.

Ayrıca, üst sınıfın davranışını değiştirmek yerine genişletmek için geçersiz kılmayı super ile birleştirebilirsin:

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void speak() {
    super.speak();  // Önce ebeveynin versiyonunu çağır
    print('$name also purrs');
  }
}

Bu kalıp, mevcut işlevselliğin üzerine inşa etmenizi sağlar. Temel kural basittir: alt sınıftaki aynı yöntem adı ve parametreler, alt sınıf örneklerinde çağrıldığında üst sınıfın uygulamasının yerini alır.

challenge icon

Görev

Kolay

Alt sınıfların, davranışı özelleştirmek için üst sınıf yöntemlerini nasıl geçersiz kılabildiğini gösteren bir bildirim sistemi oluşturalım. Her biri mesajları kendine özgü bir şekilde ileten farklı bildirim türleri oluşturacaksın.

Kodunu iki dosyada düzenleyeceksin:

  • notification.dart: Bildirim hiyerarşini burada tanımla:
    • Bir Notification sınıfı (üst sınıf) oluştur ve bu sınıfta bir String title ile bir String message bulunsun. Her iki değeri alan bir kurucu ve send() çıktısını yazdıran bir Notification: [title] - [message] yöntemi ekle.
    • EmailNotification sınıfını genişleten ve bir Notification özelliği ekleyen bir String recipient sınıfı oluştur. send() yöntemini geçersiz kılarak Sending email to [recipient]: [title] - [message] çıktısını yazdır.
    • PushNotification sınıfını genişleten ve bir Notification özelliği ekleyen bir String deviceId sınıfı oluştur. send() yöntemini geçersiz kıl; önce send() kullanarak üst sınıfın super yöntemini çağır, ardından bir sonraki satıra Pushed to device: [deviceId] yazdır.
  • main.dart: Bildirim dosyanı içe aktar ve yöntem geçersiz kılmayı uygulamalı olarak göster:
    • Başlığı Notification ve mesajı 'Alert' olan temel bir 'System update available' oluştur.
    • Onun send() yöntemini çağır.
    • Boş bir satır yazdır.
    • Başlığı EmailNotification, mesajı 'Welcome' ve alıcısı 'Thanks for signing up!' olan bir 'user@example.com' oluştur.
    • Onun send() yöntemini çağır.
    • Boş bir satır yazdır.
    • Başlığı PushNotification, mesajı 'Reminder' ve deviceId değeri 'Meeting in 10 minutes' olan bir 'DEVICE-001' oluştur.
    • Onun send() yöntemini çağır.

EmailNotification sınıfının üst sınıfın davranışını tamamen değiştirdiğine, PushNotification sınıfının ise önce super.send() çağrısı yaparak bu davranışı genişlettiğine dikkat et. İhtiyaçlarına bağlı olarak her iki yaklaşım da yöntemleri geçersiz kılmanın geçerli yollarıdır.

Beklenen çıktı:

Notification: Alert - System update available

Sending email to user@example.com: Welcome - Thanks for signing up!

Notification: Reminder - Meeting in 10 minutes
Pushed to device: DEVICE-001

Kendin dene

import 'notification.dart';

void main() {
  // TODO: Create a base Notification with title 'Alert' and message 'System update available'
  // send() metodunu çağır

  // TODO: Boş bir satır yazdır

  // TODO: Bir EmailNotification oluştur:
  // - title: 'Welcome'
  // - message: 'Thanks for signing up!'
  // - recipient: 'user@example.com'
  // send() metodunu çağır

  // TODO: Boş bir satır yazdır

  // TODO: Bir PushNotification oluştur:
  // - title: 'Reminder'
  // - message: 'Meeting in 10 minutes'
  // - deviceId: 'DEVICE-001'
  // send() metodunu çağır
}
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