Menu
Coddy logo textTech

Kurucular ve Kalıtım

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 41 / 110.

Bir alt sınıf bir üst sınıfı genişlettiğinde, devralınan alanları doğru şekilde başlatmak için üst sınıfın yapıcısı çağrılmalıdır. Dart, başlatıcı listesinde super kullanarak bunu ele almanın esnek yollarını sunar.

Üst sınıfın parametreli bir kurucusu varsa, alt sınıf onu açıkça çağırmalıdır:

class Person {
  String name;
  int age;
  
  Person(this.name, this.age);
}

class Student extends Person {
  String school;
  
  Student(String name, int age, this.school) : super(name, age);
}

Dart 2.17, parametreleri doğrudan üst sınıfın oluşturucusuna ileten daha temiz bir söz dizimi olan super parametrelerini kullanıma sundu:

class Student extends Person {
  String school;
  
  // super.name ve super.age doğrudan Person'ın kurucusuna iletilir
  Student(super.name, super.age, this.school);
}

Adlandırılmış yapıcılarla çalışırken, hangi üst sınıf yapıcısının çağrılacağını belirtirsiniz:

class Employee extends Person {
  String department;
  
  Employee(super.name, super.age, this.department);
  
  Employee.intern(String name, this.department) : super(name, 18);
}

Temel kural basittir: Alt sınıf kendi özelliklerini eklemeden önce üst sınıfın tamamen başlatılması gerekir. İster geleneksel super() çağrısını ister daha yeni olan süper parametreleri kullanın, Dart, kalıtım zincirinin üst sınıftan alt sınıfa doğru düzgün bir şekilde oluşturulmasını sağlar.

challenge icon

Görev

Kolay

Kalıtımla kurucuların nasıl çalıştığını gösteren bir ürün envanteri sistemi oluşturalım. Farklı ürün türlerinin temel bir ürün sınıfını genişlettiği ve her birinin üst sınıf kurucuları aracılığıyla doğru şekilde başlatılmasını gerektiren bir hiyerarşi oluşturacaksın.

Kodunu iki dosyada düzenleyeceksin:

  • product.dart: Ürün hiyerarşini burada tanımla:
    • Product ve String name özelliklerine sahip bir double price sınıfı, her iki değeri alan bir kurucu ve info() yazdıran [name]: $[price] yöntemi
    • Book sınıfını genişleten ve bir Product özelliği ekleyen bir String author sınıfı. name ve price değerlerini üst sınıf kurucusuna iletmek için super parametrelerini kullan
    • Electronics sınıfını genişleten ve bir Product özelliği (ay cinsinden) ekleyen bir int warranty sınıfı. Değerleri üst sınıfa geçirmek için başlatıcı listesinde geleneksel super() çağrısını kullan
  • main.dart: Ürün dosyanı içe aktar ve her iki kurucu kalıtımı yaklaşımını göster:
    • Adı Book, fiyatı 'Dart Essentials' ve yazarı 29.99 olan bir 'Jane Smith' oluştur
    • info() yöntemini çağır, ardından Author: [author] yazdır
    • Boş bir satır yazdır
    • Adı Electronics, fiyatı 'Wireless Mouse' ve garanti süresi 45.50 olan bir 24 oluştur
    • info() yöntemini çağır, ardından Warranty: [warranty] months yazdır

Her iki alt sınıf da info() yöntemini yeniden tanımlamaya gerek kalmadan Product sınıfından miras alır. Temel fark, üst sınıf kurucusunu çağırma biçimlerindedir: Book daha sade super parametreleri söz dizimini kullanırken, Electronics başlatıcı listesinde super() ile geleneksel yaklaşımı kullanır.

Beklenen çıktı:

Dart Essentials: $29.99
Author: Jane Smith

Wireless Mouse: $45.5
Warranty: 24 months

Kendin dene

import 'product.dart';

void main() {
  // TODO: Şunlara sahip bir Book oluşturun:
  // - name: 'Dart Essentials'
  // - price: 29.99
  // - author: 'Jane Smith'

  // TODO: Kitabın info() metodunu çağırın

  // TODO: "Author: [author]" yazdırın

  // TODO: Boş bir satır yazdırın

  // TODO: Şunlara sahip bir Electronics oluşturun:
  // - name: 'Wireless Mouse'
  // - price: 45.50
  // - warranty: 24

  // TODO: Elektronik cihazın info() metodunu çağırın

  // TODO: "Warranty: [warranty] months" yazdırın
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Dart derleyicisi