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 Beaglesuper(n) 줄이 없어도 프로그램은 여전히 실행되지만, Animal의 생성자는 건너뛰므로 animal_name을 설정하는 코드가 없어 빈 문자열로 남습니다. 자식 클래스가 부모 클래스의 변수를 사용하기 전에 준비할 수 있도록 super()를 먼저 넣으세요.
다른 메서드에서는 super()가 현재 메서드의 부모 버전을 실행합니다. 자식은 부모의 결과를 유지하고 여기에 내용을 추가합니다:
# animal.gd
func describe() -> String:
return "I am " + animal_name# dog.gd
func describe() -> String:
return super() + ", a " + breedvar rex := Dog.new("Rex", "Husky")
print(rex.describe())Animal created: Rex
Dog breed set: Husky
I am Rex, a Husky다른 부모 메서드를 호출하려면 점 뒤에 이름을 쓰세요. super.describe()는 Dog의 모든 메서드에서 사용할 수 있습니다.
챌린지
쉬움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())
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러