Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Kalı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 bir start() metoduna sahip bir Vehicle sınıfı (üst sınıf).
    • Vehicle sınıfını genişleten (extends) bir Motorcycle sınıfı. Bu sınıf ek bir int cc özelliğine (motor hacmi), hem markayı hem de cc'yi alan (markayı super kullanarak üst sınıfa aktaran) bir kurucuya ve [brand] is doing a wheelie! yazdıran kendine ait bir wheelie() metoduna sahip olmalıdır.
  • main.dart: Araç dosyanızı içe aktarın ve kalıtımın işleyişini gösterin:
    • 'Toyota' markasıyla bir Vehicle oluşturun
    • Onun start() metodunu çağırın
    • 'Harley' markası ve 1200 cc ile bir Motorcycle oluş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]cc yazdı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: 1200cc

Kopya 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 Dog

Bu, 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
}
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