Menu
CoddyTech

Temel Kalıtım

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 15 / 65.

Kalıtım, bir sınıfın başka bir sınıfın değişkenlerini ve metotlarını devralmasını sağlar. Bunları aktaran sınıf üst sınıf, bunları alan sınıf ise alt sınıftır.

İşte kendi dosyasında bulunan bir üst sınıf:

# 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")

Bir alt sınıf, üst sınıfının adını extends'ten sonra yazar. Üst sınıfın class_name'i globaldir, bu yüzden dog.gd için import satırı gerekmez:

# dog.gd
class_name Dog
extends Animal

Bu Dog sınıfının kendine ait bir kodu yoktur, ancak animal_name, info() ve Animal sınıfının kurucusuna sahiptir:

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

Bir çocuk, devralınanların yanına kendi yöntemlerini ekleyebilir. Bu yöntemlerin içinde, devralınan değişkenler çocuk tarafından tanımlanmış gibi çalışır:

# 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!

Kalıtım tek yönlüdür. Bir Animal, Dog'un eklediklerini almaz; bu nedenle bir Animal nesnesinde bark() çağırmak hatadır.

Şimdiye kadar yazdığınız sınıflar extends RefCounted diyordu: Godot'ta yerleşik bir sınıf olan RefCounted'ın alt sınıflarıydılar.

challenge icon

Görev

Kolay

Bir üst sınıf ve bir alt sınıf oluştur.

  • vehicle.gd içinde, Vehicle sınıfına brand ve model adında iki String değişkeni ver. Yapıcı, iki argümanını bu değişkenlerde saklasın ve info() şu değeri döndürsün: Vehicle: BRAND MODEL.
  • car.gd dosyasında zaten extends Vehicle yazıyor. honk() metodunu yaz: bu metot, Car sınıfının miras aldığı değişkenleri kullanarak BRAND MODEL says Beep beep! değerini döndürsün.

Car için bir yapıcı gerekmez: Car.new("Honda", "Civic"), Vehicle sınıfındaki yapıcıyı kullanır.

Sağlanan kod, ardından kaç aracın geleceğini ve her araç için bir satır okur: vehicle veya car, bir marka ve bir model. Her araç için info() çıktısını, ayrıca bir araba için honk() çıktısını yazdırır. vehicle Toyota Corolla ve car Honda Civic için şu çıktıyı verir:

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

Kodunu vehicle.gd ve car.gd dosyalarına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

extends Node

func _ready():
	# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
	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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi