Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Alt 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 Message sınıfı (üst sınıf) oluştur; bu sınıfta bir String sender ve bir String content bulunsun. Her iki değeri alan bir oluşturucu ve display() yazdıran bir From [sender]: [content] metodu ekle
    • UrgentMessage sınıfını genişleten bir Message sınıfı oluştur. Bu sınıfta ek olarak bir String priority özelliği bulunmalı. Oluşturucu sender, content ve priority değerlerini almalı; ilk ikisini super kullanarak üst sınıfa aktarmalıdır. display() metodunu geçersiz kılarak önce super.display() kullanımıyla üst sınıfın sürümünü çağır, ardından bir sonraki satıra Priority: [priority] yazdır
  • main.dart: Mesaj dosyanı içe aktar ve super anahtar sözcüğünün hem oluşturucularda hem de metotlarda nasıl çalıştığını göster:
    • Message gö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
    • UrgentMessage gö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: HIGH

Kendin 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
}
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