目次
01. クラスの継承
クラスの継承のような実装のサンプル
Luaでは __indexを使用することで、クラスのような仕組みで、継承することもできます。
Color1 = {}
function Color1 :new(name)
local obj = {name = name}
setmetatable(obj, self)
self.__index = self
return obj
end
function Color1 :getName1()
print("red")
end
-- Color2 クラス(Color1 を継承)
Color2 = setmetatable({}, {__index = Color1 })
function Color2:getName2()
print("blue")
end
local Color2 = Color2:new()
Color2:getName1() -- red
Color2:getName2() -- blue
Color1が親クラスでColor2が子クラスです。
21行目のColor2:new()を呼ぶと、Color1:new()が呼ばれてobjが作成されます。
23行目は、Color2:getName2()を呼ぶと、Color2内にgetName2があるので、それが実行されます。
22行目は、Color2にはgetName1がないので__indexによるメソッド検索でColor1:getName1が呼ばれます。
22行目は、親クラスのColor1のメソッドを実行しています。
→Color2クラスは、親クラスのメソッドを再実装しないで済んでいます。継承です。
関連の記事