只说最简单的
首先要理解函数用.和:的区别:
在lua中function Class.new(self,o)和function Class:new(o)是等价的,用冒号只是可以少写点字,没有其他用处。
然后建个table当基类
BaseClass = {}
BaseClass.__index = BaseClass
BaseClass.init = function(self,a) print(a) end
如果另一个类继承它就可以像下面这么写
SubClass = {}
setmetatable(SubClass,BaseClass)
用setmetatable设置元表后,当在SubClass里找不到想要的属性时就会自动去元表的__index指定的表里找属性。
比如调用
SubClass:init("hi")或SubClass.init(SubClass,"hi")
就会打印hi
其实这里把
setmetatable(SubClass,BaseClass)
改成
setmetatable(SubClass,SubClass)
SubClass.__index = BaseClass
效果一样