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 AnimalEste 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 animalUna 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.
Desafío
FácilConstruye una clase padre y una clase hija.
- En
vehicle.gd, asigna aVehicledos variables String,brandymodel. El constructor almacena sus dos argumentos en ellas, yinfo()devuelveVehicle: BRAND MODEL. car.gdya indicaextends Vehicle. Escribe su métodohonk(): devuelveBRAND MODEL says Beep beep!, usando las variables queCarhereda.
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())
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
1Fundamentos de la programación orientada a objetos
Archivos externosIntroducción a la programación orientada a objetosClases vs. objetosLa palabra clave selfMétodosPropiedadesConstructor (_init)Repaso: calculadora sencilla4Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas7Señales
¿Qué es una señal?Declarar y emitirConectarse a las señalesSeñales con argumentosRepaso: sistema de salud10Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite2Propiedades de clase
Variables de instancia y estáticasFunciones estáticasMétodos setter de propiedadesMétodos getter de propiedadesPrivado por convenciónRepaso: administrador de cuentas bancarias5Encapsulación
Miembros públicos y privadosValidación con settersOcultación de informaciónPropiedades de solo lecturaRepaso: sistema de registros de estudiantes8Conceptos avanzados de POO
Composición frente a herenciaClases internasNodos como componentesRefCounted frente a NodeEnums en clases3Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosCadenas de herenciaComprobaciones de tipo con isRepaso: jerarquía de empleados6Métodos especiales
Introducción a los métodos virtualesEl método _to_stringIteradores personalizadosRepaso: lista personalizada9Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de GDScript online