Podstawy dziedziczenia
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 15 z 65.
Dziedziczenie pozwala jednej klasie przejąć zmienne i metody innej klasy. Klasa, która je przekazuje, to klasa nadrzędna, a klasa, która je otrzymuje, to klasa potomna.
Oto klasa nadrzędna w osobnym pliku:
# 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")Klasa potomna podaje nazwę klasy nadrzędnej po extends. class_name klasy nadrzędnej jest globalne, więc dog.gd nie potrzebuje wiersza importu:
# dog.gd
class_name Dog
extends AnimalTen Dog nie ma własnego kodu, ale ma animal_name, info() i konstruktor klasy Animal:
var creature := Animal.new("Creature")
var buddy := Dog.new("Buddy")
creature.info()
buddy.info()I am Creature, an animal
I am Buddy, an animalKlasa potomna może dodawać własne metody obok odziedziczonych. W ich obrębie odziedziczone zmienne działają tak, jakby zadeklarowała je klasa potomna:
# 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!Dziedziczenie działa w jedną stronę. Animal nie otrzymuje tego, co dodaje Dog, więc wywołanie bark() na obiekcie Animal jest błędem.
Klasy, które do tej pory napisałeś, zawierały extends RefCounted: były klasami potomnymi RefCounted, klasy wbudowanej w Godot.
Wyzwanie
ŁatwyZbuduj klasę nadrzędną i klasę podrzędną.
- W
vehicle.gddodaj doVehicledwie zmienne typu String:brandimodel. Konstruktor zapisuje w nich swoje dwa argumenty, ainfo()zwracaVehicle: BRAND MODEL. - W
car.gdznajduje się już zapisextends Vehicle. Napisz metodęhonk(): zwracaBRAND MODEL says Beep beep!, używając zmiennych dziedziczonych przezCar.
Car nie potrzebuje konstruktora: Car.new("Honda", "Civic") używa konstruktora z Vehicle.
Dostarczony kod odczytuje liczbę kolejnych pojazdów, a następnie po jednym wierszu dla każdego pojazdu: vehicle lub car, markę i model. Wypisuje info() dla każdego pojazdu, a w przypadku samochodu również honk(). Dla vehicle Toyota Corolla i car Honda Civic wypisuje:
Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!Umieść swój kod w plikach vehicle.gd i car.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online