Das Schlüsselwort super
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 16 von 65.
Wenn ein Kind zusätzliche Daten benötigt, schreibt es sein eigenes _init(). Der Konstruktor des Elternteils wird dann nicht mehr automatisch ausgeführt. Rufe ihn mit super() auf und übergib die Argumente, die das Elternteil erwartet:
# 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 BeagleOhne die Zeile super(n) läuft das Programm weiterhin, aber der Konstruktor von Animal wird übersprungen: Nichts setzt animal_name, daher bleibt es ein leerer String. Setze super() an den Anfang, damit die Variablen der Elternklasse bereit sind, bevor die Unterklasse sie verwendet.
In jeder anderen Methode führt super() die Version der Methode der Elternklasse aus, in der du dich gerade befindest. Das Kind behält das Ergebnis der Elternklasse bei und ergänzt es:
# 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 HuskyUm eine andere Methode der Elternklasse aufzurufen, schreibe ihren Namen nach einem Punkt: super.describe() funktioniert in jeder Methode von Dog.
Aufgabe
EinfachSchreibe eine Person-Klasse und eine Employee-Klasse, die von ihr erbt.
Personspeichertperson_nameundagein seinem Konstruktor.introduce()gibtHi, I'm NAME and I'm AGE years oldzurück.Employeefügtjobhinzu. Sein Konstruktor übergibt den Namen und das Alter ansuper()und speichert den Beruf.introduce()gibt das Ergebnis derintroduce()-Methode der Elternklasse gefolgt von. I work as a JOBzurück.
Der bereitgestellte Code liest ein, wie viele Personen folgen, und danach eine Zeile pro Person: person NAME AGE oder employee NAME AGE JOB. Er gibt für jede Person introduce() aus. Für person Alice 30 und employee Bob 35 Developer gibt er Folgendes aus:
Hi, I'm Alice and I'm 30 years old
Hi, I'm Bob and I'm 35 years old. I work as a DeveloperDein Code gehört in person.gd und employee.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
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())
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler