Menu
CoddyTech

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 Beagle

super(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 " + breed
var rex := Dog.new("Rex", "Husky")
print(rex.describe())
Animal created: Rex
Dog breed set: Husky
I am Rex, a Husky

Farklı 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.

challenge icon

Görev

Kolay

Person sınıfını ve onu genişleten bir Employee sınıfı yaz.

  • Person, kurucusunda person_name ve age değerlerini saklar. introduce(), Hi, I'm NAME and I'm AGE years old değerini döndürür.
  • Employee, job ekler. Kurucusu adı ve yaşı super() metoduna aktarır ve işi saklar. introduce() metodu, ebeveynin introduce() metodunun sonucunun ardından . I work as a JOB değ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 Developer

Kodunu 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())
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 GDScript derleyicisi