Grundlegende Vererbung
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 15 von 65.
Vererbung ermöglicht es einer Klasse, die Variablen und Methoden einer anderen Klasse zu übernehmen. Die Klasse, die sie weitergibt, ist die Elternklasse, und die Klasse, die sie erhält, ist die Kindklasse.
Hier ist eine Elternklasse in ihrer eigenen Datei:
# animal.gd
class_name Animal
extends RefCounted
var animal_name: String
func _init(n: String) -> void:
animal_name = n
func info() -> void:
print("I am ", animal_name, ", an animal")Eine Kindklasse benennt ihre Elternklasse nach extends. Der class_name der Elternklasse ist global, daher benötigt dog.gd keine Importzeile:
# dog.gd
class_name Dog
extends AnimalDieser Dog hat keinen eigenen Code, aber er besitzt animal_name, info() und den Konstruktor von Animal:
var creature := Animal.new("Creature")
var buddy := Dog.new("Buddy")
creature.info()
buddy.info()I am Creature, an animal
I am Buddy, an animalEin Kind kann neben den geerbten Methoden eigene Methoden hinzufügen. In ihnen funktionieren die geerbten Variablen so, als hätte das Kind sie selbst deklariert:
# dog.gd
class_name Dog
extends Animal
func bark() -> void:
print(animal_name, " says Woof!")var buddy := Dog.new("Buddy")
buddy.info()
buddy.bark()I am Buddy, an animal
Buddy says Woof!Vererbung funktioniert nur in eine Richtung. Ein Animal erhält nicht, was Dog hinzufügt. Daher ist es ein Fehler, bark() für ein Animal-Objekt aufzurufen.
Die Klassen, die du bisher geschrieben hast, enthielten extends RefCounted: Sie waren Unterklassen von RefCounted, einer in Godot integrierten Klasse.
Aufgabe
EinfachErstelle eine Elternklasse und eine Kindklasse.
- Gib
Vehicleinvehicle.gdzwei String-Variablen,brandundmodel. Der Konstruktor speichert seine beiden Argumente darin, undinfo()gibtVehicle: BRAND MODELzurück. - In
car.gdsteht bereitsextends Vehicle. Schreibe die Methodehonk(): Sie gibtBRAND MODEL says Beep beep!zurück und verwendet dabei die Variablen, dieCarerbt.
Car benötigt keinen Konstruktor: Car.new("Honda", "Civic") verwendet den von Vehicle.
Der bereitgestellte Code liest ein, wie viele Fahrzeuge folgen, und danach eine Zeile pro Fahrzeug: vehicle oder car, eine Marke und ein Modell. Er gibt für jedes Fahrzeug info() aus und zusätzlich für ein Auto honk(). Für vehicle Toyota Corolla und car Honda Civic gibt er Folgendes aus:
Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!Dein Code gehört in vehicle.gd und car.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] == "car":
var car := Car.new(parts[1], parts[2])
print(car.info())
print(car.honk())
else:
var vehicle := Vehicle.new(parts[1], parts[2])
print(vehicle.info())
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