Rantai Pewarisan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 18 dari 65.
Class turunan dapat menjadi parent. Setiap extends menambahkan satu tingkat pada rantai pewarisan:
# vehicle.gd
class_name Vehicle
extends RefCounted
var wheels: int
func _init(w: int) -> void:
wheels = w
func describe() -> String:
return "%d wheels" % wheels# car.gd
class_name Car
extends Vehicle
func _init() -> void:
super(4)
func describe() -> String:
return "Car with " + super()# race_car.gd
class_name RaceCar
extends Car
var top_speed: int
func _init(speed: int) -> void:
super()
top_speed = speed
func describe() -> String:
return super() + ", top speed %d" % top_speedRaceCar memiliki semua yang ada di Car dan Vehicle. Setiap super() naik satu tingkat, jadi satu pemanggilan menjalankan ketiga versi describe():
print(RaceCar.new(300).describe())Car with 4 wheels, top speed 300Saat kamu memanggil method atau membaca variabel, Godot mencari terlebih dahulu di class milik object itu sendiri, lalu di parent-nya, kemudian di parent dari parent tersebut, dan menggunakan yang pertama ditemukan. RaceCar.new(300).wheels ditemukan di Vehicle, dua tingkat di atas.
Setiap class memiliki tepat satu induk. extends menerima satu class, dan mencantumkan dua class akan menyebabkan error penguraian:
class_name FlyingCar
extends Car, PlaneParse Error: Expected end of statement after superclass, found "," instead.GDScript tidak mendukung pewarisan berganda. Jika sebuah class memerlukan fitur dari dua class, susun keduanya dalam satu rantai, atau berikan object dari class lainnya agar dapat digunakan (bab berikutnya membahas hal ini).
Tantangan
Mudahcharacter.gd berisi class Character yang sudah selesai: nama, hp, describe() yang mengembalikan NAME (HP HP), dan attack() yang mengembalikan 1. Buat dua tingkat lagi di atasnya:
WarriormewarisiCharacterdan menambahkanstrength. Konstruktor meneruskan nama dan hp kesuper().describe()menambahkan, strength Ske teks induknya, danattack()mengembalikan strength.KnightmewarisiWarriordan menambahkanarmor. Konstruktor meneruskan nama, hp, dan strength kesuper().describe()menambahkan, armor Ake teksWarrior, danattack()mengembalikan attack milikWarriorditambah5.
Kode yang disediakan membaca jumlah karakter, lalu membaca satu baris untuk setiap karakter: character NAME HP, warrior NAME HP STRENGTH, atau knight NAME HP STRENGTH ARMOR. Kode tersebut mencetak describe() dan attack. Untuk knight Arthur 120 15 8, kode tersebut mencetak:
Arthur (120 HP), strength 15, armor 8
Attack: 20Tulis kodemu di warrior.gd dan knight.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan tetap seperti ini
var count := int(OS.read_string_from_stdin())
for i in count:
var p := OS.read_string_from_stdin().split(" ")
var c: Character
if p[0] == "knight":
c = Knight.new(p[1], int(p[2]), int(p[3]), int(p[4]))
elif p[0] == "warrior":
c = Warrior.new(p[1], int(p[2]), int(p[3]))
else:
c = Character.new(p[1], int(p[2]))
print(c.describe())
print("Attack: %d" % c.attack())
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan Pengguna3Pewarisan
Pewarisan DasarKata Kunci superPenimpaan MethodRantai PewarisanPemeriksaan Tipe dengan isUlasan: Hierarki KaryawanLatihan sendiri: Compiler GDScript online