Herança básica
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 15 de 65.
Herança permite que uma classe herde as variáveis e os métodos de outra. A classe que os transmite é a classe pai, e a classe que os recebe é a classe filha.
Aqui está uma classe pai em seu próprio arquivo:
# 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")Uma classe filha nomeia sua classe pai após extends. O class_name da classe pai é global, então dog.gd não precisa de uma linha de importação:
# dog.gd
class_name Dog
extends AnimalEste Dog não tem código próprio, mas tem animal_name, info() e o construtor 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 animalUma classe filha pode adicionar seus próprios métodos além dos herdados. Dentro deles, as variáveis herdadas funcionam como se a classe filha as tivesse 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!A herança ocorre em uma única direção. Um Animal não recebe o que Dog acrescenta, então chamar bark() em um objeto Animal é um erro.
As classes que você escreveu até agora diziam extends RefCounted: elas eram filhas de RefCounted, uma classe integrada ao Godot.
Desafio
FácilCrie uma classe pai e uma classe filha.
- Em
vehicle.gd, dê àVehicleduas variáveis String,brandemodel. O construtor armazena nelas seus dois argumentos, einfo()retornaVehicle: BRAND MODEL. car.gdjá contémextends Vehicle. Escreva o métodohonk(): ele retornaBRAND MODEL says Beep beep!, usando as variáveis herdadas porCar.
Car não precisa de construtor: Car.new("Honda", "Civic") usa o de Vehicle.
O código fornecido lê quantos veículos virão em seguida e, depois, uma linha por veículo: vehicle ou car, uma marca e um modelo. Ele imprime info() para cada veículo e também honk() para um carro. Para vehicle Toyota Corolla e car Honda Civic, ele imprime:
Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!Seu código deve ficar em vehicle.gd e car.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
extends Node
func _ready():
# Código de entrada/saída fornecido: mantenha-o 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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação orientada a objetos
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online