Menu
CoddyTech

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 Animal

Dieser 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 animal

Ein 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.

challenge icon

Aufgabe

Einfach

Erstelle eine Elternklasse und eine Kindklasse.

  • Gib Vehicle in vehicle.gd zwei String-Variablen, brand und model. Der Konstruktor speichert seine beiden Argumente darin, und info() gibt Vehicle: BRAND MODEL zurück.
  • In car.gd steht bereits extends Vehicle. Schreibe die Methode honk(): Sie gibt BRAND MODEL says Beep beep! zurück und verwendet dabei die Variablen, die Car erbt.

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())
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler