Lua 多重继承

--从【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()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值