Penimpaan Method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 17 dari 65.
Anak meng-override sebuah method dengan mendefinisikan method bernama sama. Object dari class anak kemudian menjalankan versi milik anak, sedangkan method yang tidak di-override tetap diwarisi tanpa perubahan.
# 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 Buddyoverride harus mempertahankan signature milik induknya: parameter yang sama dan tipe pengembalian yang sama. Jika berbeda, program tidak akan berjalan:
# 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".Versi anak tetap berjalan meskipun pemanggilan berasal dari method induknya. Di sini introduce() hanya ada di Animal, dan fungsi itu memanggil sound(), yang ditimpa oleh Cat:
# 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 MeowVariabel tidak dapat ditimpa: mendeklarasikan var animal_name lagi di Dog akan menyebabkan error penguraian (The member "animal_name" already exists in parent class Animal). Untuk memberikan nilai awal yang berbeda kepada child, tetapkan nilainya di _init() milik child.
Tantangan
Mudahshape.gd berisi class Shape yang sudah selesai: sebuah color, area() yang mengembalikan 0.0, dan describe(). Circle dan Square mewarisinya dan konstruktornya sudah tersedia. Override dua method pada masing-masing:
Circle:area()mengembalikanPI * radius * radius, dandescribe()mengembalikanThis is a COLOR circle with radius R.Square:area()mengembalikanside * side, dandescribe()mengembalikanThis is a COLOR square with side S.
Pertahankan signature milik induk: func area() -> float dan func describe() -> String.
Kode yang disediakan membaca jumlah bentuk berikutnya, lalu satu baris untuk setiap bentuk: shape COLOR, circle COLOR RADIUS, atau square COLOR SIDE. Kode ini mencetak describe() dan luas dengan dua angka desimal. Untuk circle red 5 dan shape green, kode ini mencetak:
This is a red circle with radius 5
Area: 78.54
This is a green shape
Area: 0.00Tulis kodemu di circle.gd dan square.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 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())
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