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 BeagleBez 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 " + breedvar rex := Dog.new("Rex", "Husky")
print(rex.describe())Animal created: Rex
Dog breed set: Husky
I am Rex, a HuskyAby wywołać inną metodę klasy nadrzędnej, wpisz jej nazwę po kropce: super.describe() działa z dowolnej metody klasy Dog.
Wyzwanie
ŁatwyNapisz klasę Person i klasę Employee, która ją rozszerza.
Personprzechowujeperson_nameiagew swoim konstruktorze.introduce()zwracaHi, I'm NAME and I'm AGE years old.Employeedodajejob. Jego konstruktor przekazuje imię i wiek dosuper()i przechowuje zawód. Jego metodaintroduce()zwraca wynik metodyintroduce()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 DeveloperUmieść 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())
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online