super Anahtar Sözcüğü
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.
Ebeveyn sınıfın kurucusunu çağırmanız gerektiğinde super, bağıtım zinciri boyunca bağımsız değişkenleri üst sınıfa iletir:
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ğrıldığında, üst sınıfın yöntemi sürümünü açıkça çağırmış olursun. super olmadan makeSound() çağrısı mevcut sınıfın yöntemine başvurur ve bu da potansiyel olarak sonsuz özyinelemeye neden olabilir.
super ifadesini, bunun bir oluşturucu, metot veya özellik olmasına bakılmaksızın, "ebeveynimin sürümünü kullan" demek gibi düşün.
Görev
KolayAlt sınıfların üst sınıflarının davranışlarına erişip bunları genişletmesini sağlayan super anahtar sözcüğünün nasıl çalıştığını gösteren bir mesajlaşma sistemi oluşturalım. Farklı mesaj türlerinin temel bir mesaj sınıfı üzerine kurulduğu bir hiyerarşi oluşturacaksın.
Kodunu iki dosyada düzenleyeceksin:
message.dart: Mesaj sınıflarını burada tanımla:- Bir
Messagesınıfı (üst sınıf) oluştur; bu sınıfta birString senderve birString contentbulunsun. Her iki değeri alan bir oluşturucu vedisplay()yazdıran birFrom [sender]: [content]metodu ekle UrgentMessagesınıfını genişleten birMessagesınıfı oluştur. Bu sınıfta ek olarak birString priorityözelliği bulunmalı. Oluşturucu sender, content ve priority değerlerini almalı; ilk ikisinisuperkullanarak üst sınıfa aktarmalıdır.display()metodunu geçersiz kılarak öncesuper.display()kullanımıyla üst sınıfın sürümünü çağır, ardından bir sonraki satıraPriority: [priority]yazdır
- Bir
main.dart: Mesaj dosyanı içe aktar vesuperanahtar sözcüğünün hem oluşturucularda hem de metotlarda nasıl çalıştığını göster:Messagegöndereninden, içeriği'Alice'olan normal bir'Hello there!'oluştur- Onun
display()metodunu çağır - Ayrım için boş bir satır yazdır
UrgentMessagegöndereninden, içeriği'Bob've önceliği'Server is down!'olan bir'HIGH'oluştur- Onun
display()metodunu çağır
UrgentMessage sınıfının super anahtar sözcüğünü iki şekilde kullandığına dikkat et: oluşturucuda verileri üst sınıfa aktarmak 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: HIGHKendin 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
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