0.lua的類lua
(1)lua的類實際上就是lua的 table ,類之間的繼承實際上就是吧 table 連到一塊兒了,調用方法和屬性,對象
就是先去第一個table搜索若是沒有再去連在後面的table裏搜索。繼承
(2)lua裏的self實際上就是table了,也能表明類名io
(3)lua繼承table
local self = {}function
setmetatable(self , classA) 在表self基礎上創建classA,classA是一個新表class
setmetatable(classB , classA) 在表classA基礎上創建classB,classB是一個新表基礎
(4)表惟一的標示搜索
classA.__index = classAmeta
1.類的屬性
(1) classA = {x = 0, y = 0}
(2) classA = {}
classA._x = 0
classA._y = 0
兩種聲明屬性都行,以後在方法裏能夠經過,self.x 調用
2.類的方法
function classA:new()
隱藏傳遞 self ,默認第一個參數,能夠經過 self.xxx 調用屬性和方法
end
function classA.new()
必需要傳遞 類名(self), 不然不能調用 self
end
聲明和調用方法都用 :、屬性的調用所有用點號 .
3.建立類
classA = {}
classA.__index = classA
function classA:new()
local self = {} 實現了一個類有多個對象,建立一個對象跟誰着建立了一個元表 self ,
若是前面的 local 去掉一個類只能有一個對象
setmetatable(self , classA)
return self
end
4.使用類
classA = {x = 0, y = 0} --{}能夠聲明屬性
classA.__index = classA
function classA:new() --function 前面不能加 local,前面已經經過 classA限定範圍了
local self = {} --建立新的表做爲實例的對象
setmetatable(self , classA) --設置class爲對象元表的__index
return self --返回該新表
end
function classA:func()
print("classA : func")
end
function classA:createA(tag)
print("classA : create "..tag)
end
local sa = classA:new() --實例化對象sa
sa:createA(122)
classA:createA(3)
5.類的繼承
classB = {}
classB.__index = classB
function classB:new()
setmetatable(classB , classA) --父類放在後面。實際上就是把 classB 和 classA 連到一塊兒先搜 classB 表有沒有這個方法,
--沒有會向後搜索 classA 再沒有會繼續向後搜索,若是沒有會返回 nil
return classB
end
function classB:createB(tag)
print("classA : create "..tag)
end
local sb = classB:new() sb:createA(102)