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)

相关文章
相关标签/搜索