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 AnimalQuesto 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 animalUna 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.
Sfida
FacileCrea una classe genitore e una classe figlia.
- In
vehicle.gd, assegna aVehicledue variabili String,brandemodel. Il costruttore vi memorizza i suoi due argomenti einfo()restituisceVehicle: BRAND MODEL. car.gdcontiene giàextends Vehicle. Scrivi il suo metodohonk(): restituisceBRAND MODEL says Beep beep!, usando le variabili ereditate daCar.
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())
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
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online