Menu
CoddyTech

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 Beagle

Tanpa 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 " + breed
var rex := Dog.new("Rex", "Husky")
print(rex.describe())
Animal created: Rex
Dog breed set: Husky
I am Rex, a Husky

Untuk memanggil method parent yang berbeda, tulis namanya setelah titik: super.describe() dapat digunakan dari method apa pun di Dog.

challenge icon

Tantangan

Mudah

Tulis class Person dan class Employee yang memperluasnya.

  • Person menyimpan person_name dan age di konstruktornya. introduce() mengembalikan Hi, I'm NAME and I'm AGE years old.
  • Employee menambahkan job. Konstrukturnya meneruskan nama dan umur ke super() lalu menyimpan pekerjaan. introduce()-nya mengembalikan hasil introduce() 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 Developer

Tulis 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())
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online