Kalıtım Zincirleri
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 18 / 65.
Bir alt sınıfın kendisi de bir üst sınıf olabilir. Her extends, kalıtım zincirine bir düzey ekler:
# 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, Car'daki ve Vehicle'daki her şeye sahiptir. Her super() bir üst seviyeye çıkar, bu nedenle tek bir çağrı describe() işlevinin üç sürümünü de çalıştırır:
print(RaceCar.new(300).describe())Car with 4 wheels, top speed 300Bir yöntemi çağırdığınızda veya bir değişkeni okuduğunuzda Godot önce nesnenin kendi sınıfına, sonra üst sınıfına, ardından üst sınıfının üst sınıfına bakar ve bulduğu ilkini kullanır. RaceCar.new(300).wheels, iki seviye yukarıdaki Vehicle içinde bulunur.
Her sınıfın tam olarak bir üst sınıfı vardır. extends tek bir sınıf alır; iki sınıf listelemek bir ayrıştırma hatasına yol açar:
class_name FlyingCar
extends Car, PlaneParse Error: Expected end of statement after superclass, found "," instead.GDScript'te çoklu kalıtım yoktur. Bir sınıfın iki sınıfın özelliklerine ihtiyaç duyduğu durumlarda, bunları tek bir zincirde birleştirin veya çalışması için diğer sınıftan bir nesne verin (bunu daha sonraki bir bölüm ele alacak).
Görev
Kolaycharacter.gd, tamamlanmış Character sınıfını içerir: bir ad, hp, NAME (HP HP) döndüren describe() ve 1 döndüren attack(). Bunun üzerine iki seviye daha oluştur:
Warrior,Charactersınıfından türetilir vestrengthekler. Yapıcısı, adı ve hp'yisuper()'a iletir.describe(), üst sınıfın metnine, strength Sekler veattack()strength değerini döndürür.Knight,Warriorsınıfından türetilir vearmorekler. Yapıcısı, adı, hp'yi ve strength değerinisuper()'a iletir.describe(),Warriorsınıfının metnine, armor Aekler veattack(),Warriorsınıfının saldırı değerine5ekleyerek döndürür.
Sağlanan kod, ardından kaç karakter geleceğini okur ve her karakter için bir satır okur: character NAME HP, warrior NAME HP STRENGTH veya knight NAME HP STRENGTH ARMOR. describe() sonucunu ve saldırı değerini yazdırır. knight Arthur 120 15 8 için şu çıktıyı verir:
Arthur (120 HP), strength 15, armor 8
Attack: 20Kodunu warrior.gd ve knight.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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())
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt Sistemi3Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz KılmaKalıtım Zincirleriis ile Tür KontrolleriTekrar: Çalışan Hiyerarşisi9Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online GDScript derleyicisi