--从【0】 处开始function sertchField( parents ,k)
for i,v in pairs(parents) do
local result =v[k]--遍历parents={...} 里的每个元素,查找一个键为k的成员(例如 fly ,onfoot) --【3】这里找到了 fly onfoot 就返回 找不到 就 返回 nil 了
if result then
return result
end
end
end
function extends(...)
local cls={}--继承了 parents={...} 里的类的新类
local parents={...}
--【2】在新类里面找不到的成员 将按照sertchField 的规则去找【3】
setmetatable(cls,{__index=function(t,k) return sertchField(parents,k) end })
--【1】这里设定cls 的__index ,当o 实例找不到成员 会进入__index 设定的表查找 当cls 也查不到【2】就会按照sertchField查找
cls.__index=cls
function cls:new(o)--为新类构造 构建函数
o=o or {} --【0】设定元表 ,在o 实例找不到的 成员 将会到cls 新类里面去找 但是 cls 的__index还没有设定, --因此在上面别忘了设定cls的__index 在【1】处
setmetatable(o,cls)
return o
end
return cls
end
--会飞的行为
FlyAction={}
function FlyAction:fly()print("flying ")
end
--会走的行为
onFootAction ={}
function onFootAction:onfoot()print("on foot ")
end--构建 一个新类
TwoAction = extends( FlyAction ,onFootAction)
--实例化一个新类 进入【0】
anim=TwoAction:new({name="bird"})
--print(anim.kk)
anim:fly()
anim:onfoot()
Lua 多重继承
最新推荐文章于 2022-07-03 22:13:42 发布