La parola chiave super
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 16 di 65.
Quando un figlio ha bisogno di dati aggiuntivi, scrive il proprio _init(). Il costruttore del genitore quindi non viene più eseguito da solo. Chiamalo con super(), passando gli argomenti che il genitore si aspetta:
# 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 BeagleSenza la riga super(n) il programma continua a funzionare, ma il costruttore di Animal viene saltato: niente imposta animal_name, quindi rimane una String vuota. Inserisci super() per prima cosa, così le variabili del genitore sono pronte prima che il figlio le usi.
In qualsiasi altro metodo, super() esegue la versione del metodo della classe genitore in cui ti trovi. La classe figlia mantiene il risultato della classe genitore e vi aggiunge qualcosa:
# 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 HuskyPer chiamare un altro metodo della classe genitore, scrivi il suo nome dopo un punto: super.describe() funziona da qualsiasi metodo di Dog.
Sfida
FacileScrivi una classe Person e una classe Employee che la estende.
Personmemorizzaperson_nameeagenel suo costruttore.introduce()restituisceHi, I'm NAME and I'm AGE years old.Employeeaggiungejob. Il suo costruttore passa il nome e l'età asuper()e memorizza il lavoro. Il suointroduce()restituisce il risultato diintroduce()della classe genitore seguito da. I work as a JOB.
Il codice fornito legge quante persone seguono, poi una riga per ogni persona: person NAME AGE oppure employee NAME AGE JOB. Stampa introduce() per ciascuna. Per person Alice 30 e employee Bob 35 Developer stampa:
Hi, I'm Alice and I'm 30 years old
Hi, I'm Bob and I'm 35 years old. I work as a DeveloperIl tuo codice va in person.gd e employee.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Codice di input/output fornito: lascialo così com'è
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())
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online