Menu
CoddyTech

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 Beagle

Sans 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 " + breed
var rex := Dog.new("Rex", "Husky")
print(rex.describe())
Animal created: Rex
Dog breed set: Husky
I am Rex, a Husky

Pour appeler une autre méthode parente, écris son nom après un point : super.describe() fonctionne depuis n’importe quelle méthode de Dog.

challenge icon

Défi

Facile

Écris une classe Person et une classe Employee qui l’étend.

  • Person stocke person_name et age dans son constructeur. introduce() renvoie Hi, I'm NAME and I'm AGE years old.
  • Employee ajoute job. Son constructeur transmet le nom et l’âge à super() et stocke le métier. Son introduce() renvoie le résultat de introduce() 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 Developer

Ton 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())
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur GDScript en ligne