Lua学习笔记(六)
Lua面向对象
封装
-- 元类
People={isHumen=true} -- 此处定义的元素都是相当于C++的静态成员变量
-- 基类方法new
function People:new(o,n,a)
o=o or {}
setmetatable(o,self) -- self相当于C++的this指针,但是这里指代的是元类People而不是对象o
self.__index=self
o.name=n -- 用self代替o相当于C++中给静态成员变量赋值
o.age=a
return o
end
-- 基类元方法__tostring
function People:__tostring()
local sum="名字为:"..self.name.."\n年龄为:"..self.age -- 此处self指代的是实际调用时的对象
return sum
end
-- 基类方法walk
function People:walk()
print("我正在走!")
end
-- 创建对象
me=People:new(nil,"Jaxes",21)
-- 调用对象中的函数
print(me) -- 等价于print(tostring(me))
me:walk() -- 等价于me.walk(me)
继承
-- 类Worker派生自People类
Worker=People:new()
-- 派生类
function Worker:new(o,n,a,id)
o=o or People:new(o,n,a)
setmetatable(o,self)
self.__index=self
o.id=id
return o
end
function Worker:__tostring()
local sum=People.__tostring(self)
sum=sum.."\nID为:"..self.id
return sum
end
worker=Worker:new(nil,"kaka",55,01)
print(worker)
worker:walk() -- 继承自父类函数walk
多态
这个部分暂时还不清楚怎么搞,暂时做为后续储备内容