Menu
CoddyTech

Pewarisan Dasar

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 15 dari 65.

Pewarisan memungkinkan satu class mengambil alih variabel dan method dari class lain. Class yang mewariskannya adalah induk, dan class yang menerimanya adalah anak.

Berikut adalah class induk di filenya sendiri:

# animal.gd
class_name Animal
extends RefCounted

var animal_name: String

func _init(n: String) -> void:
	animal_name = n

func info() -> void:
	print("I am ", animal_name, ", an animal")

Child class menyebutkan class induknya setelah extends. class_name milik induknya bersifat global, jadi dog.gd tidak memerlukan baris impor:

# dog.gd
class_name Dog
extends Animal

Dog ini tidak memiliki kodenya sendiri, tetapi memiliki animal_name, info(), dan konstruktor dari Animal:

var creature := Animal.new("Creature")
var buddy := Dog.new("Buddy")
creature.info()
buddy.info()
I am Creature, an animal
I am Buddy, an animal

Child dapat menambahkan method miliknya sendiri di samping method yang diwarisi. Di dalamnya, variabel yang diwarisi berfungsi seolah-olah child telah mendeklarasikannya:

# dog.gd
class_name Dog
extends Animal

func bark() -> void:
	print(animal_name, " says Woof!")
var buddy := Dog.new("Buddy")
buddy.info()
buddy.bark()
I am Buddy, an animal
Buddy says Woof!

Inheritance hanya berjalan satu arah. Animal tidak mendapatkan apa yang ditambahkan oleh Dog, jadi memanggil bark() pada object Animal adalah error.

Class yang kamu tulis sejauh ini menyatakan extends RefCounted: class tersebut adalah turunan dari RefCounted, sebuah class bawaan Godot.

challenge icon

Tantangan

Mudah

Buat class induk dan class turunan.

  • Di vehicle.gd, berikan Vehicle dua variabel String, brand dan model. Konstruktor menyimpan kedua argumennya ke dalam variabel tersebut, dan info() mengembalikan Vehicle: BRAND MODEL.
  • car.gd sudah berisi extends Vehicle. Tulis method honk(): method ini mengembalikan BRAND MODEL says Beep beep!, menggunakan variabel yang diwarisi Car.

Car tidak memerlukan konstruktor: Car.new("Honda", "Civic") menggunakan konstruktor dari Vehicle.

Kode yang disediakan membaca jumlah kendaraan yang akan dimasukkan, lalu satu baris untuk setiap kendaraan: vehicle atau car, sebuah brand dan sebuah model. Kode tersebut mencetak info() untuk setiap kendaraan dan juga honk() untuk sebuah mobil. Untuk vehicle Toyota Corolla dan car Honda Civic, kode tersebut mencetak:

Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!

Tulis kodemu di vehicle.gd dan car.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] == "car":
			var car := Car.new(parts[1], parts[2])
			print(car.info())
			print(car.honk())
		else:
			var vehicle := Vehicle.new(parts[1], parts[2])
			print(vehicle.info())
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