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 AnimalCe 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 animalUn 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.
Défi
FacileCréez une classe parente et une classe enfant.
- Dans
vehicle.gd, donnez àVehicledeux variables de type String,brandetmodel. Le constructeur y stocke ses deux arguments, etinfo()renvoieVehicle: BRAND MODEL. car.gdindique déjàextends Vehicle. Écrivez sa méthodehonk(): elle renvoieBRAND MODEL says Beep beep!, en utilisant les variables héritées parCar.
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())
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