Method Overriding Sekali Lagi
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 21 dari 65.
Polimorfisme berarti "banyak bentuk": satu pemanggilan method melakukan hal yang berbeda, bergantung pada class object yang menerimanya. Penggantian method memungkinkan hal ini.
# animal.gd
class_name Animal
extends RefCounted
func speak() -> String:
return "..."# dog.gd
class_name Dog
extends Animal
func speak() -> String:
return "Woof!"# cat.gd
class_name Cat
extends Animal
func speak() -> String:
return "Meow!"Sebuah Array[Animal] dapat menampung semuanya. Perulangan memanggil speak() tanpa mengetahui class mana yang dimiliki setiap elemennya, dan setiap object menjawab dengan versinya sendiri:
var animals: Array[Animal] = [Dog.new(), Cat.new(), Animal.new()]
for animal in animals:
print(animal.speak())Woof!
Meow!
...Fungsi dengan parameter Animal bekerja dengan cara yang sama. Fungsi ini menerima setiap class turunan, termasuk class yang kamu tambahkan nanti, tanpa perubahan:
func make_it_speak(animal: Animal) -> void:
print("It says ", animal.speak())make_it_speak(Cat.new())It says Meow!Bandingkan ini dengan memeriksa class satu per satu. Rangkaian percabangan if animal is Dog: harus bertambah setiap kali ada class baru. Dengan overriding, setiap class memiliki perilakunya sendiri, dan kode yang memanggilnya tetap sama.
Tantangan
MudahSebuah garasi menangani setiap kendaraan melalui satu Array[Vehicle]. Di vehicle.gd, wheels() mengembalikan 0 dan sound() mengembalikan ....
- Tulis
describe()diVehicle. Fungsi ini mengembalikanBRAND: N wheels, SOUND, dengan memanggilwheels()dansound(). Carmeng-overridewheels()dengan4dansound()denganVroom.Motorcyclemeng-override keduanya dengan2danBrrm.Trucksudah menyimpan jumlahtrailers. Class ini meng-overridewheels()dengan6ditambah4untuk setiap trailer, dansound()denganHonk.
Class turunan tidak meng-override describe(). Kode yang disediakan membaca jumlah kendaraan berikutnya, lalu satu baris untuk setiap kendaraan: car BRAND, motorcycle BRAND, truck BRAND TRAILERS atau vehicle BRAND. Kode ini mencetak setiap describe() dan total wheels(). Untuk car Toyota dan truck Volvo 2, kode ini mencetak:
Toyota: 4 wheels, Vroom
Volvo: 14 wheels, Honk
Total wheels: 18Tulis kodemu di vehicle.gd, car.gd, motorcycle.gd dan truck.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 apa adanya
var count := int(OS.read_string_from_stdin())
var vehicles: Array[Vehicle] = []
for i in count:
var p := OS.read_string_from_stdin().split(" ")
if p[0] == "car":
vehicles.append(Car.new(p[1]))
elif p[0] == "motorcycle":
vehicles.append(Motorcycle.new(p[1]))
elif p[0] == "truck":
vehicles.append(Truck.new(p[1], int(p[2])))
else:
vehicles.append(Vehicle.new(p[1]))
var total := 0
for v in vehicles:
print(v.describe())
total += v.wheels()
print("Total wheels: %d" % total)
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 PenggunaLatihan sendiri: Compiler GDScript online