Menu
CoddyTech

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 Animal

Este 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 animal

Uma 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.

challenge icon

Desafio

Fácil

Crie uma classe pai e uma classe filha.

  • Em vehicle.gd, dê à Vehicle duas variáveis String, brand e model. O construtor armazena nelas seus dois argumentos, e info() retorna Vehicle: BRAND MODEL.
  • car.gd já contém extends Vehicle. Escreva o método honk(): ele retorna BRAND MODEL says Beep beep!, usando as variáveis herdadas por Car.

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())
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de GDScript online