Menu
CoddyTech

Herencia básica

Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 15 de 65.

La herencia permite que una clase herede las variables y los métodos de otra. La clase que los transmite es la clase padre, y la clase que los recibe es la clase hija.

Aquí hay una clase padre en su propio archivo:

# 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")

Una clase hija nombra a su clase padre después de extends. El class_name de la clase padre es global, así que dog.gd no necesita una línea de importación:

# dog.gd
class_name Dog
extends Animal

Este Dog no tiene código propio y, aun así, tiene animal_name, info() y el constructor 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

Una clase hija puede añadir sus propios métodos junto a los heredados. Dentro de ellos, las variables heredadas funcionan como si la clase hija las hubiera declarado:

# 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!

La herencia va en una sola dirección. Un Animal no obtiene lo que añade Dog, así que llamar a bark() en un objeto Animal es un error.

Las clases que has escrito hasta ahora decían extends RefCounted: eran clases derivadas de RefCounted, una clase integrada en Godot.

challenge icon

Desafío

Fácil

Construye una clase padre y una clase hija.

  • En vehicle.gd, asigna a Vehicle dos variables String, brand y model. El constructor almacena sus dos argumentos en ellas, y info() devuelve Vehicle: BRAND MODEL.
  • car.gd ya indica extends Vehicle. Escribe su método honk(): devuelve BRAND MODEL says Beep beep!, usando las variables que Car hereda.

Car no necesita constructor: Car.new("Honda", "Civic") usa el de Vehicle.

El código proporcionado lee cuántos vehículos vienen a continuación y luego una línea por vehículo: vehicle o car, una marca y un modelo. Imprime info() para cada vehículo y también honk() para un coche. Para vehicle Toyota Corolla y car Honda Civic, imprime:

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

Tu código va en vehicle.gd y car.gd. main.gd contiene el código de entrada/salida proporcionado y no se puede editar.

Pruébalo tú mismo

extends Node

func _ready():
	# Código de entrada/salida proporcionado: mantenlo tal como está
	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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de GDScript online