superキーワード
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/65。
子クラスで追加のデータが必要な場合は、独自の _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を設定するものがないため、空のStringのままです。子クラスが親クラスの変数を使う前に準備できるよう、最初に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()に渡し、職業を保存します。introduce()は、親クラスのintroduce()の結果の後に. I work as a JOBを続けて返します。
与えられたコードは、続く人数を読み取った後、1人につき1行を読み取ります。形式は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オンラインコンパイラ