renzhe20092584的专栏

0.lua的类

(1)lua的类实际上就是lua的 table ,类之间的继承实际上就是吧 table 连到一起了,调用方法和属性,

就是先去第一个table搜索如果没有再去连在后面的table里搜索。

(2)lua里的self实际上就是table了,也能代表类名

(3)lua继承

local self = {}

setmetatable(self , classA) 在表self基础上建立classA,classA是一个新表

setmetatable(classB , classA) 在表classA基础上建立classB,classB是一个新表

(4)表唯一的标示

classA.__index = classA

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 = classAfunction classA:new() –function 前面不能加 local,前面已经通过 classA限定范围了 local self = {} –创建新的表作为实例的对象 setmetatable(self , classA) –设置class为对象元表的__index return self –返回该新表endfunction classA:func() print("classA : func")endfunction classA:createA(tag) print("classA : create "..tag)end

local sa = classA:new() –实例化对象sasa:createA(122)classA:createA(3)

5.类的继承

classB = {}classB.__index = classBfunction classB:new() setmetatable(classB , classA) –父类放在后面。实际上就是把 classB 和 classA 连到一起先搜 classB 表有没有这个方法, –没有会向后搜索 classA 再没有会继续向后搜索,,如果没有会返回 nil return classB endfunction classB:createB(tag) print("classA : create "..tag)end

local sb = classB:new()sb:createA(102)

6.2dx的lua继承

『 不可能 』只存在於蠢人的字典里

renzhe20092584的专栏

相关文章:

你感兴趣的文章:

标签云: