基类
Class={x=0,y=0}
Class.__index=Class
--模拟类的原理就是生成一个table作为元表
function Class:new(x,y)
local self={}
setmetatable(self,Class)
self.x=x;
self.y=y
return self
end
function Class:Show()
print(self.x,self.y)
end
子类:
require 'Class'
--声明了新的属性Z
SubClass = {z = 0}
--设置元表为Class
setmetatable(SubClass, Class)
--还是和类定义一样,表索引设定为自身,设为自身的原因是,index找不到的话就会报错,从而有提示作用
SubClass.__index = SubClass
--这里是构造方法
function SubClass:new(x,y,z)
local self = {} --初始化对象自身
self = Class:new(x,y) --将对象自身设定为父类,这个语句相当于其他语言的super ,可以理解为调用父类的构造函数
setmetatable(self, SubClass) --将对象自身元表设定为SubClass类
self.z= z --新的属性初始化,如果没有将会按照声明=0
return self
end
--定义一个新的方法
function SubClass:go()
self.x = self.x + 10
end
--重定义父类的方法,相当于override
function SubClass:test()
print(self.x,self.y,self.z)
end
418

被折叠的 条评论
为什么被折叠?



