Menu
CoddyTech

Słowo kluczowe super

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

Gdy dziecko potrzebuje dodatkowych danych, zapisuje własną metodę _init(). Konstruktor rodzica nie uruchamia się wtedy już sam. Wywołaj go za pomocą super(), przekazując argumenty oczekiwane przez rodzica:

# 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

Bez wiersza super(n) program nadal działa, ale konstruktor Animal jest pomijany: nic nie ustawia animal_name, więc pozostaje on pustym ciągiem znaków. Umieść super() na początku, aby zmienne klasy nadrzędnej były gotowe, zanim użyje ich klasa potomna.

W każdej innej metodzie super() uruchamia wersję metody rodzica, w której się znajdujesz. Klasa potomna zachowuje wynik rodzica i dodaje do niego:

# 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

Aby wywołać inną metodę klasy nadrzędnej, wpisz jej nazwę po kropce: super.describe() działa z dowolnej metody klasy Dog.

challenge icon

Wyzwanie

Łatwy

Napisz klasę Person i klasę Employee, która ją rozszerza.

  • Person przechowuje person_name i age w swoim konstruktorze. introduce() zwraca Hi, I'm NAME and I'm AGE years old.
  • Employee dodaje job. Jego konstruktor przekazuje imię i wiek do super() i przechowuje zawód. Jego metoda introduce() zwraca wynik metody introduce() klasy nadrzędnej, po którym następuje . I work as a JOB.

Dostarczony kod odczytuje liczbę kolejnych osób, a następnie po jednym wierszu na każdą osobę: person NAME AGE lub employee NAME AGE JOB. Wypisuje wynik introduce() dla każdej z nich. Dla person Alice 30 i employee Bob 35 Developer wypisuje:

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

Umieść swój kod w plikach person.gd i employee.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] == "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 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