Menu
CoddyTech

Ereditarietà di base

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 15 di 65.

L'ereditarietà permette a una classe di ereditare le variabili e i metodi di un'altra. La classe che li trasmette è la classe genitore, mentre quella che li riceve è la classe figlia.

Ecco una classe genitore nel suo file:

# 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 classe figlia indica la sua classe genitore dopo extends. Il class_name della classe genitore è globale, quindi dog.gd non ha bisogno di una riga di importazione:

# dog.gd
class_name Dog
extends Animal

Questo Dog non ha codice proprio, ma ha animal_name, info() e il costruttore di 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 classe figlia può aggiungere i propri metodi accanto a quelli ereditati. Al loro interno, le variabili ereditate funzionano come se fossero state dichiarate dalla classe figlia:

# 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’ereditarietà procede in una sola direzione. Un Animal non acquisisce ciò che Dog aggiunge, quindi chiamare bark() su un oggetto Animal è un errore.

Le classi che hai scritto finora dichiaravano extends RefCounted: erano classi derivate da RefCounted, una classe integrata in Godot.

challenge icon

Sfida

Facile

Crea una classe genitore e una classe figlia.

  • In vehicle.gd, assegna a Vehicle due variabili String, brand e model. Il costruttore vi memorizza i suoi due argomenti e info() restituisce Vehicle: BRAND MODEL.
  • car.gd contiene già extends Vehicle. Scrivi il suo metodo honk(): restituisce BRAND MODEL says Beep beep!, usando le variabili ereditate da Car.

Car non ha bisogno di un costruttore: Car.new("Honda", "Civic") usa quello di Vehicle.

Il codice fornito legge quanti veicoli seguono, poi una riga per ogni veicolo: vehicle o car, una marca e un modello. Stampa info() per ogni veicolo e anche honk() per un'auto. Per vehicle Toyota Corolla e car Honda Civic stampa:

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

Il tuo codice va in vehicle.gd e car.gd. main.gd contiene il codice fornito per l'input/output e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Supplied input/output code: keep it as it is
	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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online