lua模擬Class

基類


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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章