Основы наследования
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 15 из 65.
Наследование позволяет одному классу перенимать переменные и методы другого. Класс, который их передаёт, называется родительским, а класс, который их получает, — дочерним.
Вот родительский класс в отдельном файле:
# 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")Дочерний класс указывает родительский после extends. class_name родительского класса является глобальным, поэтому в dog.gd не нужна строка импорта:
# dog.gd
class_name Dog
extends AnimalУ этого Dog нет собственного кода, но у него есть animal_name, info() и конструктор 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Дочерний класс может добавлять собственные методы наряду с унаследованными. Внутри этих методов унаследованные переменные работают так, как если бы дочерний класс объявил их:
# 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!Наследование работает только в одном направлении. Animal не получает того, что добавляет Dog, поэтому вызов bark() для объекта Animal — это ошибка.
В классах, которые вы написали до сих пор, было указано extends RefCounted: они были наследниками RefCounted, класса, встроенного в Godot.
Задание
ЛегкоСоздай родительский и дочерний классы.
- В
vehicle.gdзадай классуVehicleдве переменные типа String:brandиmodel. Конструктор сохраняет в них два аргумента, аinfo()возвращаетVehicle: BRAND MODEL. - В
car.gdуже указаноextends Vehicle. Напиши методhonk(): он возвращаетBRAND MODEL says Beep beep!, используя переменные, унаследованные классомCar.
Классу Car не нужен конструктор: Car.new("Honda", "Civic") использует конструктор класса Vehicle.
Предоставленный код считывает количество следующих транспортных средств, а затем по одной строке на каждое: vehicle или car, марку и модель. Для каждого транспортного средства он выводит info(), а для автомобиля также honk(). Для vehicle Toyota Corolla и car Honda Civic он выводит:
Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!Твой код нужно добавить в vehicle.gd и car.gd. В main.gd находится предоставленный код ввода/вывода, его нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода-вывода: оставьте его без изменений
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())
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript