Menu
CoddyTech

Héritage de base

Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 15 sur 65.

L’héritage permet à une classe de récupérer les variables et les méthodes d’une autre. La classe qui les transmet est le parent, et celle qui les reçoit est l’enfant.

Voici une classe parente dans son propre fichier :

# animal.gd
class_name Animal
extends RefCounted

var animal_name: String

func _init(n: String) -> void:
	animal_name = n

func info() -> void:
	print("I am ", animal_name, ", an animal")

Une classe enfant nomme sa classe parente après extends. Le class_name de la classe parente est global, donc dog.gd n’a pas besoin de ligne d’importation :

# dog.gd
class_name Dog
extends Animal

Ce Dog n'a pas de code propre, et pourtant il possède animal_name, info() et le constructeur de Animal :

var creature := Animal.new("Creature")
var buddy := Dog.new("Buddy")
creature.info()
buddy.info()
I am Creature, an animal
I am Buddy, an animal

Un enfant peut ajouter ses propres méthodes à côté de celles héritées. À l’intérieur de celles-ci, les variables héritées fonctionnent comme si l’enfant les avait déclarées :

# dog.gd
class_name Dog
extends Animal

func bark() -> void:
	print(animal_name, " says Woof!")
var buddy := Dog.new("Buddy")
buddy.info()
buddy.bark()
I am Buddy, an animal
Buddy says Woof!

L’héritage va dans un seul sens. Un Animal n’obtient pas ce que Dog ajoute, donc appeler bark() sur un objet Animal est une erreur.

Les classes que vous avez écrites jusqu’à présent indiquaient extends RefCounted : elles étaient des classes dérivées de RefCounted, une classe intégrée à Godot.

challenge icon

Défi

Facile

Créez une classe parente et une classe enfant.

  • Dans vehicle.gd, donnez à Vehicle deux variables de type String, brand et model. Le constructeur y stocke ses deux arguments, et info() renvoie Vehicle: BRAND MODEL.
  • car.gd indique déjà extends Vehicle. Écrivez sa méthode honk() : elle renvoie BRAND MODEL says Beep beep!, en utilisant les variables héritées par Car.

Car n’a pas besoin de constructeur : Car.new("Honda", "Civic") utilise celui de Vehicle.

Le code fourni lit le nombre de véhicules qui suivent, puis une ligne par véhicule : vehicle ou car, une marque et un modèle. Il affiche info() pour chaque véhicule et aussi honk() pour une voiture. Pour vehicle Toyota Corolla et car Honda Civic, il affiche :

Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!

Votre code va dans vehicle.gd et car.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 : conservez-le tel quel
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "car":
			var car := Car.new(parts[1], parts[2])
			print(car.info())
			print(car.honk())
		else:
			var vehicle := Vehicle.new(parts[1], parts[2])
			print(vehicle.info())
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