Metot Geçersiz Kılma
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 17 / 65.
Bir alt sınıf, aynı ada sahip bir yöntem tanımlayarak bir yöntemi geçersiz kılar. Alt sınıfın nesneleri daha sonra alt sınıfın sürümünü çalıştırır; geçersiz kılmadığı yöntemler ise değiştirilmeden miras alınmaya devam eder.
# animal.gd
class_name Animal
extends RefCounted
var animal_name: String
func _init(n: String) -> void:
animal_name = n
func make_sound() -> void:
print("Some generic animal sound")
func info() -> void:
print("I am ", animal_name)# dog.gd
class_name Dog
extends Animal
func make_sound() -> void:
print("Woof! Woof!")var animal := Animal.new("Generic")
var dog := Dog.new("Buddy")
animal.make_sound()
dog.make_sound()
dog.info()Some generic animal sound
Woof! Woof!
I am BuddyÜzerine yazılan yöntem, üst sınıfın imzasını korumalıdır: aynı parametreler ve aynı dönüş türü. Farklı olursa program başlamaz:
# animal.gd
func speak(times: int) -> String:
return "...".repeat(times)# dog.gd
func speak() -> String:
return "Woof"Parse Error: The function signature doesn't match the parent. Parent signature is "speak(int) -> String".Üst sınıfın bir metodundan çağrı geldiğinde bile çocuğun sürümü çalışır. Burada introduce() yalnızca Animal içinde bulunur ve Cat tarafından geçersiz kılınan sound() metodunu çağırır:
# animal.gd
func sound() -> String:
return "..."
func introduce() -> String:
return animal_name + " says " + sound()# cat.gd
func sound() -> String:
return "Meow"print(Cat.new("Tom").introduce())Tom says MeowDeğişkenlerin üzerine yazılamaz: Dog içinde var animal_name ifadesini yeniden tanımlamak bir ayrıştırma hatasıdır (The member "animal_name" already exists in parent class Animal). Bir alt sınıfa farklı bir başlangıç değeri vermek için bunu alt sınıfın _init() metodunda atayın.
Görev
Kolayshape.gd, tamamlanmış Shape sınıfını içerir: bir color, 0.0 döndüren area() ve describe(). Circle ve Square bu sınıfı genişletir ve kurucuları zaten vardır. Her birinde iki yöntemi geçersiz kılın:
Circle:area(),PI * radius * radiusdöndürür vedescribe(),This is a COLOR circle with radius Rdöndürür.Square:area(),side * sidedöndürür vedescribe(),This is a COLOR square with side Sdöndürür.
Ebeveyn sınıfın imzalarını koruyun: func area() -> float ve func describe() -> String.
Sağlanan kod, ardından kaç şeklin geleceğini okur; sonra her şekil için bir satır okur: shape COLOR, circle COLOR RADIUS veya square COLOR SIDE. describe() sonucunu ve alanı iki ondalık basamakla yazdırır. circle red 5 ve shape green için şu çıktıyı verir:
This is a red circle with radius 5
Area: 78.54
This is a green shape
Area: 0.00Kodunuzu circle.gd ve square.gd dosyalarına yazın. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var shape: Shape
if parts[0] == "circle":
shape = Circle.new(parts[1], int(parts[2]))
elif parts[0] == "square":
shape = Square.new(parts[1], int(parts[2]))
else:
shape = Shape.new(parts[1])
print(shape.describe())
print("Area: %.2f" % shape.area())
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