super Anahtar Kelimesi
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 37 / 110.
super anahtar kelimesi, bir alt sınıfa üst sınıfına doğrudan erişim sağlar. Bunu zaten super(name) ile yapıcı metotlarda (constructors) görmüştünüz, ancak diğer bağlamlarda da kullanışlıdır.
Üst sınıfın (parent) kurucusunu çağırmanız gerektiğinde, super argümanları kalıtım zinciri boyunca yukarı aktarır:
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);
}super anahtar kelimesi ayrıca alt sınıf içinden üst sınıf yöntemlerine ve özelliklerine erişmenizi sağlar. Bu, özellikle üst sınıfın davranışını kendi davranışınızla birlikte kullanmak istediğinizde yararlıdır:
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(); // Önce üst sınıfın yöntemini çağır
print('$name says meow!');
}
}super.makeSound() çağırdığınızda, metodun üst sınıftaki (parent) versiyonunu açıkça çağırmış olursunuz. super olmadan, makeSound() çağırmak mevcut sınıfın metoduna atıfta bulunur ve bu da potansiyel olarak sonsuz özyinelemeye (recursion) neden olabilir.
super ifadesini; ister bir yapıcı (constructor), metot veya özellik olsun, "ebeveynimin versiyonunu kullan" demek olarak düşünün.
Görev
Kolaysuper anahtar kelimesinin, alt sınıfların üst sınıflarının davranışlarına nasıl erişmesine ve bunları genişletmesine olanak tanıdığını gösteren bir mesajlaşma sistemi oluşturalım. Farklı mesaj türlerinin temel bir mesaj sınıfı üzerine inşa edildiği bir hiyerarşi oluşturacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
message.dart: Mesaj sınıflarınızı burada tanımlayın:String senderveString contentözelliklerine sahip birMessagesınıfı (üst sınıf). Her iki değeri de alan bir yapıcı (constructor) veFrom [sender]: [content]çıktısını veren birdisplay()metodu ekleyin.Messagesınıfını genişleten birUrgentMessagesınıfı. Ek birString priorityözelliğine sahip olmalıdır. Yapıcı; sender, content ve priority değerlerini alır ve ilk ikisinisuperkullanarak üst sınıfa iletir.display()metodunu, öncesuper.display()kullanarak üst sınıfın versiyonunu çağıracak, ardından bir sonraki satıraPriority: [priority]yazdıracak şekilde geçersiz kılın (override).
main.dart: Mesaj dosyanızı içe aktarın vesuperanahtar kelimesinin hem yapıcılarda hem de metotlarda nasıl çalıştığını gösterin:'Alice'tarafından gönderilen, içeriği'Hello there!'olan normal birMessageoluşturun.- Bu nesnenin
display()metodunu çağırın. - Ayırmak için boş bir satır yazdırın.
'Bob'tarafından gönderilen, içeriği'Server is down!'ve önceliği'HIGH'olan birUrgentMessageoluşturun.- Bu nesnenin
display()metodunu çağırın.
UrgentMessage sınıfının super anahtar kelimesini iki şekilde nasıl kullandığına dikkat edin: Yapıcıda verileri üst sınıfa iletmek için ve geçersiz kılınan metotta kendi çıktısını eklemeden önce üst sınıfın çıktısını dahil etmek için.
Beklenen çıktı:
From Alice: Hello there!
From Bob: Server is down!
Priority: HIGHKopya kağıdı
super anahtar kelimesi, bir alt sınıfın içinden bir üst sınıfa erişim sağlar.
Üst sınıfın yapıcı metoduna argüman aktarmak için bir alt sınıf yapıcı metodunda super() kullanın:
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);
}Geçersiz kılınan (overridden) metotların içinden üst sınıf metotlarını çağırmak için super kullanın:
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(); // Önce üst sınıfın metodunu çağır
print('$name says meow!');
}
}super olmadan, bir metot adını doğrudan çağırmak mevcut sınıfın versiyonuna atıfta bulunur; bu da geçersiz kılınan metotlarda sonsuz özyinelemeye (infinite recursion) neden olabilir.
Kendin dene
import 'message.dart';
void main() {
// TODO: 'Alice'den 'Hello there!' içerikli normal bir Message oluşturun
// TODO: Mesaj üzerinde display() metodunu çağırın
// TODO: Ayırmak için boş bir satır yazdırın
// TODO: 'Bob'dan 'Server is down!' içerikli ve 'HIGH' öncelikli bir UrgentMessage oluşturun
// TODO: Acil mesaj üzerinde display() metodunu çağırın
}
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
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı