继承
People = {name='Chicai'}
function People:New(o,name)
 o = o or {}
 setmetatable(o,self)
 self.__index = self
 name = name or 'Chicai'
 self.name = name
 return o
end
function People:printName()
 print(self.name)
end

Boy = People:New({sex='boy'})
function Boy:printSex()
 print(self.sex)
end

me = Boy:New()
me:printName()
me:printSex()


Boy是People的一个对象(Boy的元表的__index方法是People),Boy有自己的属性sex和方法printSex

me是Boy的一个对象,Boy调用继承过来的New方法,但是self参数改为了Boy,也就是说me的元表的__index是Boy

当me调用方法,在me中找不到时,就会去Boy的__index(还是Boy)中找,Boy也找不到,就去People找,调用时,self为me了


首页 我的博客
粤ICP备17103704号