基類
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