Menu
CoddyTech

Podstawy dziedziczenia

Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 15 z 65.

Dziedziczenie pozwala jednej klasie przejąć zmienne i metody innej klasy. Klasa, która je przekazuje, to klasa nadrzędna, a klasa, która je otrzymuje, to klasa potomna.

Oto klasa nadrzędna w osobnym pliku:

# 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")

Klasa potomna podaje nazwę klasy nadrzędnej po extends. class_name klasy nadrzędnej jest globalne, więc dog.gd nie potrzebuje wiersza importu:

# dog.gd
class_name Dog
extends Animal

Ten Dog nie ma własnego kodu, ale ma animal_name, info() i konstruktor klasy 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

Klasa potomna może dodawać własne metody obok odziedziczonych. W ich obrębie odziedziczone zmienne działają tak, jakby zadeklarowała je klasa potomna:

# 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!

Dziedziczenie działa w jedną stronę. Animal nie otrzymuje tego, co dodaje Dog, więc wywołanie bark() na obiekcie Animal jest błędem.

Klasy, które do tej pory napisałeś, zawierały extends RefCounted: były klasami potomnymi RefCounted, klasy wbudowanej w Godot.

challenge icon

Wyzwanie

Łatwy

Zbuduj klasę nadrzędną i klasę podrzędną.

  • W vehicle.gd dodaj do Vehicle dwie zmienne typu String: brand i model. Konstruktor zapisuje w nich swoje dwa argumenty, a info() zwraca Vehicle: BRAND MODEL.
  • W car.gd znajduje się już zapis extends Vehicle. Napisz metodę honk(): zwraca BRAND MODEL says Beep beep!, używając zmiennych dziedziczonych przez Car.

Car nie potrzebuje konstruktora: Car.new("Honda", "Civic") używa konstruktora z Vehicle.

Dostarczony kod odczytuje liczbę kolejnych pojazdów, a następnie po jednym wierszu dla każdego pojazdu: vehicle lub car, markę i model. Wypisuje info() dla każdego pojazdu, a w przypadku samochodu również honk(). Dla vehicle Toyota Corolla i car Honda Civic wypisuje:

Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!

Umieść swój kod w plikach vehicle.gd i car.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

extends Node

func _ready():
	# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
	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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator GDScript online