Kata Kunci super
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 16 dari 65.
Jika sebuah child membutuhkan data tambahan, child tersebut menulis _init()-nya sendiri. Constructor parent tidak lagi berjalan dengan sendirinya. Panggil dengan super(), dengan meneruskan argumen yang diharapkan parent:
# animal.gd
class_name Animal
extends RefCounted
var animal_name: String
func _init(n: String) -> void:
animal_name = n
print("Animal created: ", n)# dog.gd
class_name Dog
extends Animal
var breed: String
func _init(n: String, b: String) -> void:
super(n)
breed = b
print("Dog breed set: ", b)var buddy := Dog.new("Buddy", "Beagle")
print(buddy.animal_name, " the ", buddy.breed)Animal created: Buddy
Dog breed set: Beagle
Buddy the BeagleTanpa baris super(n), program tetap berjalan, tetapi constructor Animal dilewati: tidak ada yang menetapkan animal_name, jadi nilainya tetap berupa String kosong. Letakkan super() di awal agar variabel milik parent siap sebelum child menggunakannya.
Dalam method lain, super() menjalankan versi method milik parent dari method yang sedang kamu gunakan. Child mempertahankan hasil milik parent dan menambahkan sesuatu ke dalamnya:
# animal.gd
func describe() -> String:
return "I am " + animal_name# dog.gd
func describe() -> String:
return super() + ", a " + breedvar rex := Dog.new("Rex", "Husky")
print(rex.describe())Animal created: Rex
Dog breed set: Husky
I am Rex, a HuskyUntuk memanggil method parent yang berbeda, tulis namanya setelah titik: super.describe() dapat digunakan dari method apa pun di Dog.
Tantangan
MudahTulis class Person dan class Employee yang memperluasnya.
Personmenyimpanperson_namedanagedi konstruktornya.introduce()mengembalikanHi, I'm NAME and I'm AGE years old.Employeemenambahkanjob. Konstrukturnya meneruskan nama dan umur kesuper()lalu menyimpan pekerjaan.introduce()-nya mengembalikan hasilintroduce()milik parent, diikuti. I work as a JOB.
Kode yang disediakan membaca jumlah orang berikutnya, lalu satu baris untuk setiap orang: person NAME AGE atau employee NAME AGE JOB. Kode ini mencetak introduce() untuk setiap orang. Untuk person Alice 30 dan employee Bob 35 Developer, kode ini mencetak:
Hi, I'm Alice and I'm 30 years old
Hi, I'm Bob and I'm 35 years old. I work as a DeveloperTulis kodemu di person.gd dan employee.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())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "employee":
var employee := Employee.new(parts[1], int(parts[2]), parts[3])
print(employee.introduce())
else:
var person := Person.new(parts[1], int(parts[2]))
print(person.introduce())
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