Temel Kalıtım
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 36 / 110.
Kalıtım, bir sınıfın başka bir sınıfın özelliklerini ve metotlarını edinmesini sağlar. Aynı kodu tekrar yazmak yerine, mevcut bir sınıfın üzerine inşa edilen yeni bir sınıf oluşturursunuz. Orijinal sınıfa ebeveyn (veya üst sınıf), yeni sınıfa ise çocuk (veya alt sınıf) denir.
Dart'ta, bir ebeveyn sınıftan kalıtım almak için extends anahtar kelimesini kullanırsınız:
class Animal {
String name;
Animal(this.name);
void eat() {
print('$name is eating');
}
}
class Dog extends Animal {
Dog(String name) : super(name);
void bark() {
print('$name says woof!');
}
}
void main() {
var dog = Dog('Buddy');
dog.eat(); // Animal sınıfından miras alındı
dog.bark(); // Dog sınıfında tanımlandı
}Dog sınıfı, Animal sınıfından gelen name özelliğine ve eat() metoduna otomatik olarak erişebilir, ayrıca kendi bark() metoduna da sahiptir. Bu bir "is-a" ilişkisi oluşturur - bir Dog bir Animal'dır.
Alt sınıf yeni özellikler ve metotlar ekleyebilir, ancak üst sınıftan public olan her şeyi miras alır. Farklı kütüphanelerdeki alt sınıflarda özel üyelerin (_ ile başlayanlar) doğrudan erişilebilir olmadığını, ancak miras alınan nesnede hala var olduklarını unutmayın.
Görev
KolayKalıtımın (inheritance), alt sınıfların üst sınıf işlevlerini nasıl yeniden kullanmasına ve genişletmesine olanak tanıdığını gösteren bir araç sistemi oluşturalım. Genel araçlar için bir üst sınıf ve belirli bir araç türü için bir alt sınıf oluşturacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
vehicle.dart: Sınıflarınızı burada tanımlayın:- Bir
String brandözelliğine, markayı alan bir kurucuya (constructor) ve[brand] engine starting...yazdıran birstart()metoduna sahip birVehiclesınıfı (üst sınıf). Vehiclesınıfını genişleten (extends) birMotorcyclesınıfı. Bu sınıf ek birint ccözelliğine (motor hacmi), hem markayı hem de cc'yi alan (markayısuperkullanarak üst sınıfa aktaran) bir kurucuya ve[brand] is doing a wheelie!yazdıran kendine ait birwheelie()metoduna sahip olmalıdır.
- Bir
main.dart: Araç dosyanızı içe aktarın ve kalıtımın işleyişini gösterin:'Toyota'markasıyla birVehicleoluşturun- Onun
start()metodunu çağırın 'Harley'markası ve1200cc ile birMotorcycleoluşturun- Motosikletin (Vehicle sınıfından miras alınan)
start()metodunu çağırın - Motosikletin (Motorcycle sınıfında tanımlanan)
wheelie()metodunu çağırın - Alt sınıfın kendi özelliğini göstermek için
Motorcycle engine: [cc]ccyazdırın
Motorcycle sınıfının, Vehicle sınıfından brand özelliğine ve start() metoduna nasıl otomatik olarak erişim kazandığına, aynı zamanda kendi benzersiz cc özelliğine ve wheelie() metoduna nasıl sahip olduğuna dikkat edin. Kalıtımın gücü budur - mevcut kodun üzerine inşa etmek.
Beklenen çıktı:
Toyota engine starting...
Harley engine starting...
Harley is doing a wheelie!
Motorcycle engine: 1200ccKopya kağıdı
Bir ebeveyn sınıftan miras alan bir alt sınıf oluşturmak için extends anahtar kelimesini kullanın:
class Animal {
String name;
Animal(this.name);
void eat() {
print('$name is eating');
}
}
class Dog extends Animal {
Dog(String name) : super(name);
void bark() {
print('$name says woof!');
}
}Alt sınıf, ebeveyn sınıftaki tüm genel (public) özellikleri ve metotları miras alır. Parametreleri ebeveyn kurucusuna (constructor) iletmek için alt sınıf kurucusunda super ifadesini kullanın.
Alt sınıflar, miras alınanlara erişmeye devam ederken kendi özelliklerini ve metotlarını ekleyebilirler:
var dog = Dog('Buddy');
dog.eat(); // Inherited from Animal
dog.bark(); // Defined in DogBu, bir "is-a" (bir ...-dır) ilişkisi oluşturur - bir Köpek (Dog) bir Hayvandır (Animal).
Kendin dene
import 'vehicle.dart';
void main() {
// TODO: Markası 'Toyota' olan bir Vehicle oluşturun
// TODO: Aracın start() metodunu çağırın
// TODO: Markası 'Harley' ve cc değeri 1200 olan bir Motorcycle oluşturun
// TODO: Motosikletin start() metodunu çağırın (Vehicle sınıfından miras alınan)
// TODO: Motosikletin wheelie() metodunu çağırın
// TODO: Motosikletin cc özelliğini kullanarak 'Motorcycle engine: [cc]cc' yazdı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ı