super Anahtar Sözcüğü
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 65.
Bir çocuğun ek verilere ihtiyacı olduğunda kendi _init() metodunu yazar. Böylece ebeveynin kurucusu artık kendiliğinden çalışmaz. Ebeveynin beklediği bağımsız değişkenleri ileterek super() ile çağır:
# animal.gd
class_name Animal
extends RefCounted
var animal_name: String
func _init(n: String) -> void:
animal_name = n
print("Animal created: ", n)# dog.gd
class_name Dog
extends Animal
var breed: String
func _init(n: String, b: String) -> void:
super(n)
breed = b
print("Dog breed set: ", b)var buddy := Dog.new("Buddy", "Beagle")
print(buddy.animal_name, " the ", buddy.breed)Animal created: Buddy
Dog breed set: Beagle
Buddy the Beaglesuper(n) satırı olmadan program yine de çalışır, ancak Animal yapıcısı atlanır: animal_name değişkenine hiçbir değer atanmaz, bu yüzden boş bir String olarak kalır. super() ifadesini ilk sıraya koy, böylece ebeveyn sınıfın değişkenleri, alt sınıf onları kullanmadan önce hazır olur.
Diğer tüm metotlarda super(), içinde bulunduğunuz metodun üst sınıftaki sürümünü çalıştırır. Alt sınıf, üst sınıfın sonucunu korur ve buna ekleme yapar:
# animal.gd
func describe() -> String:
return "I am " + animal_name# dog.gd
func describe() -> String:
return super() + ", a " + breedvar rex := Dog.new("Rex", "Husky")
print(rex.describe())Animal created: Rex
Dog breed set: Husky
I am Rex, a HuskyFarklı bir üst sınıf yöntemini çağırmak için adını noktadan sonra yaz: super.describe(), Dog sınıfının herhangi bir yönteminden çalışır.
Görev
KolayPerson sınıfını ve onu genişleten bir Employee sınıfı yaz.
Person, kurucusundaperson_nameveagedeğerlerini saklar.introduce(),Hi, I'm NAME and I'm AGE years olddeğerini döndürür.Employee,jobekler. Kurucusu adı ve yaşısuper()metoduna aktarır ve işi saklar.introduce()metodu, ebeveyninintroduce()metodunun sonucunun ardından. I work as a JOBdeğerini döndürür.
Verilen kod, kaç kişinin geleceğini okur ve ardından her kişi için bir satır okur: person NAME AGE veya employee NAME AGE JOB. Her biri için introduce() metodunun sonucunu yazdırır. person Alice 30 ve employee Bob 35 Developer için şu çıktıyı verir:
Hi, I'm Alice and I'm 30 years old
Hi, I'm Bob and I'm 35 years old. I work as a DeveloperKodunu person.gd ve employee.gd dosyalarına yaz. main.gd, verilen girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "employee":
var employee := Employee.new(parts[1], int(parts[2]), parts[3])
print(employee.introduce())
else:
var person := Person.new(parts[1], int(parts[2]))
print(person.introduce())
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 Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt Sistemi3Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz KılmaKalıtım Zincirleriis ile Tür KontrolleriTekrar: Çalışan Hiyerarşisi9Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online GDScript derleyicisi