Menu
CoddyTech

super 키워드

Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 16번째.

자식 클래스에 추가 데이터가 필요하면 자체 _init()을 작성합니다. 그러면 부모의 생성자는 더 이상 자동으로 실행되지 않습니다. 부모가 기대하는 인수를 전달하여 super()로 호출하세요.

# 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

super(n) 줄이 없어도 프로그램은 여전히 실행되지만, Animal의 생성자는 건너뛰므로 animal_name을 설정하는 코드가 없어 빈 문자열로 남습니다. 자식 클래스가 부모 클래스의 변수를 사용하기 전에 준비할 수 있도록 super()를 먼저 넣으세요.

다른 메서드에서는 super()가 현재 메서드의 부모 버전을 실행합니다. 자식은 부모의 결과를 유지하고 여기에 내용을 추가합니다:

# 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

다른 부모 메서드를 호출하려면 점 뒤에 이름을 쓰세요. super.describe()는 Dog의 모든 메서드에서 사용할 수 있습니다.

challenge icon

챌린지

쉬움

Person 클래스와 이를 확장하는 Employee 클래스를 작성하세요.

  • Person은 생성자에서 person_name과 age를 저장합니다. introduce()는 Hi, I'm NAME and I'm AGE years old를 반환합니다.
  • Employee는 job을 추가합니다. 생성자는 이름과 나이를 super()에 전달하고 job을 저장합니다. introduce()는 부모의 introduce() 결과 뒤에 . I work as a JOB을 이어 붙여 반환합니다.

제공된 코드는 뒤따르는 사람의 수를 읽은 다음, 사람마다 한 줄씩 읽습니다: person NAME AGE 또는 employee NAME AGE JOB. 각 사람에 대해 introduce()를 출력합니다. person Alice 30과 employee Bob 35 Developer에 대해 다음을 출력합니다:

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

코드는 person.gd와 employee.gd에 작성하세요. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

extends Node

func _ready():
	# 제공된 입출력 코드: 그대로 유지하세요
	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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 GDScript 컴파일러