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ındaki name özelliğine ve eat() yöntemine otomatik olarak erişebilir; ayrıca kendine ait bark() yöntemi de vardır. Bu, bir "is-a" ilişkisi oluşturur: 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 alt sınıfların üst sınıf işlevlerini yeniden kullanmasına ve genişletmesine nasıl 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.
Kodunu iki dosyada düzenleyeceksin:
vehicle.dart: Sınıflarını burada tanımla:Vehiclesınıfı (üst sınıf):String brandözelliğine, markayı alan bir kurucuya vestart()yazdıran[brand] engine starting...metoduna sahip olmalıMotorcyclesınıfını genişleten birVehiclesınıfı. Ek birint ccözelliği (motor hacmi), hem markayı hem de cc değerini alan bir kurucusu (markayısuperkullanarak üst sınıfa aktarmalı) vewheelie()yazdıran kendi[brand] is doing a wheelie!metodu olmalı
main.dart: Araç dosyanı içe aktar ve kalıtımı uygulamada göster:Vehiclemarkasına sahip bir'Toyota'oluştur- Onun
start()metodunu çağır Motorcyclemarkasına ve'Harley'cc değerine sahip bir1200oluştur- Motosikletin
start()metodunu çağır (Vehicle sınıfından kalıtılmıştır) - Motosikletin
wheelie()metodunu çağır (Motorcycle sınıfında tanımlanmıştır) - Alt sınıfın kendi özelliğini göstermek için
Motorcycle engine: [cc]ccyazdır
Motorcycle sınıfının brand sınıfındaki start() özelliğine ve Vehicle metoduna otomatik olarak erişim kazandığına, aynı zamanda kendine özgü cc özelliğine ve wheelie() metoduna sahip olduğuna dikkat et. 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: 1200ccKendin 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
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