Le mot-clé super
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 16 sur 65.
Lorsqu’un enfant a besoin de données supplémentaires, il écrit son propre _init(). Le constructeur du parent ne s’exécute alors plus automatiquement. Appelez-le avec super(), en transmettant les arguments attendus par le parent :
# 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 BeagleSans la ligne super(n), le programme s’exécute quand même, mais le constructeur de Animal est ignoré : rien ne définit animal_name, donc il reste une chaîne vide. Placez super() en premier, afin que les variables du parent soient prêtes avant que l’enfant les utilise.
Dans toute autre méthode, super() exécute la version de la méthode du parent dans laquelle tu te trouves. L’enfant conserve le résultat du parent et y ajoute quelque chose :
# 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 HuskyPour appeler une autre méthode parente, écris son nom après un point : super.describe() fonctionne depuis n’importe quelle méthode de Dog.
Défi
FacileÉcris une classe Person et une classe Employee qui l’étend.
Personstockeperson_nameetagedans son constructeur.introduce()renvoieHi, I'm NAME and I'm AGE years old.Employeeajoutejob. Son constructeur transmet le nom et l’âge àsuper()et stocke le métier. Sonintroduce()renvoie le résultat deintroduce()de la classe parente, suivi de. I work as a JOB.
Le code fourni lit le nombre de personnes qui suivent, puis une ligne par personne : person NAME AGE ou employee NAME AGE JOB. Il affiche introduce() pour chacune d’elles. Pour person Alice 30 et employee Bob 35 Developer, il affiche :
Hi, I'm Alice and I'm 30 years old
Hi, I'm Bob and I'm 35 years old. I work as a DeveloperTon code va dans person.gd et employee.gd. main.gd contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : ne le modifiez pas
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())
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne