Lua對象類

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)

相關文章
相關標籤/搜索