Menu
CoddyTech

Kế thừa cơ bản

Thuộc phần Lập trình hướng đối tượng trong hành trình GDScript của Coddy. Bài học 15 trên 65.

Kế thừa cho phép một lớp sử dụng các biến và phương thức của lớp khác. Lớp truyền chúng đi gọi là lớp cha, còn lớp nhận chúng gọi là lớp con.

Đây là một lớp cha trong tệp riêng:

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

Lớp con khai báo lớp cha sau extends. class_name của lớp cha có phạm vi toàn cục, nên dog.gd không cần dòng import:

# dog.gd
class_name Dog
extends Animal

Dog này không có code riêng, nhưng vẫn có animal_name, info() và hàm khởi tạo của 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

Lớp con có thể thêm các phương thức riêng bên cạnh những phương thức được kế thừa. Bên trong các phương thức đó, những biến được kế thừa hoạt động như thể lớp con đã khai báo chúng:

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

Tính kế thừa chỉ đi theo một chiều. Animal không nhận được những gì Dog bổ sung, vì vậy gọi bark() trên một đối tượng Animal sẽ gây ra lỗi.

Các lớp (class) bạn đã viết cho đến nay đều có câu lệnh extends RefCounted: chúng là lớp con của RefCounted, một lớp có sẵn trong Godot.

challenge icon

Thử thách

Dễ

Tạo một lớp cha và một lớp con.

  • Trong vehicle.gd, khai báo cho Vehicle hai biến String là brand và model. Hàm khởi tạo lưu hai đối số vào các biến này, còn info() trả về Vehicle: BRAND MODEL.
  • car.gd đã có câu lệnh extends Vehicle. Viết phương thức honk() để trả về BRAND MODEL says Beep beep!, sử dụng các biến mà Car kế thừa.

Car không cần hàm khởi tạo: Car.new("Honda", "Civic") dùng hàm khởi tạo từ Vehicle.

Code được cung cấp đọc số lượng phương tiện tiếp theo, rồi đọc mỗi phương tiện trên một dòng: vehicle hoặc car, một nhãn hiệu và một mẫu xe. Code in ra info() cho mỗi phương tiện và cả honk() cho xe hơi. Với vehicle Toyota Corolla và car Honda Civic, chương trình in ra:

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

Đặt code của bạn trong vehicle.gd và car.gd. main.gd chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

extends Node

func _ready():
	# Đoạn code đầu vào/đầu ra đã cho: giữ nguyê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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch GDScript online