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.
Görev
KolayAlt 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
Notificationsınıfı (üst sınıf) oluştur ve bu sınıfta birString titleile birString messagebulunsun. Her iki değeri alan bir kurucu vesend()çıktısını yazdıran birNotification: [title] - [message]yöntemi ekle. EmailNotificationsınıfını genişleten ve birNotificationözelliği ekleyen birString recipientsınıfı oluştur.send()yöntemini geçersiz kılarakSending email to [recipient]: [title] - [message]çıktısını yazdır.PushNotificationsınıfını genişleten ve birNotificationözelliği ekleyen birString deviceIdsınıfı oluştur.send()yöntemini geçersiz kıl; öncesend()kullanarak üst sınıfınsuperyöntemini çağır, ardından bir sonraki satıraPushed to device: [deviceId]yazdır.
- Bir
main.dart: Bildirim dosyanı içe aktar ve yöntem geçersiz kılmayı uygulamalı olarak göster:- Başlığı
Notificationve 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.
- Başlığı
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-001Kendin 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
}
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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi