Lua 基础知识-面向对象

时间:2023-03-10 01:37:31
Lua 基础知识-面向对象

通过函数闭包的方式来实现面向对象

 -- 通过函数闭包的方式来实现面向对象

 function People(name)
local self = {}
local function init()
self.name = name
end self.sayHi = function()
print("Hello"..self.name)
end
init()
return self
end --local p = People("XiaoLi")
--p:sayHi() -- 继承
function Man(name) local function init() end local self = People(name) self.sayHi() -- 调用父类的函数 self.sayHi = function()
print("重写父类的函数 sayHi")
end
return self
end local m = Man("隔壁老王")
m:sayHi()

通过复制表的方式来实现面向对象

 -- Lua语言面向对象之复制表的方式面向对象

 function clone(tab)
local ins = {}
for key, var in pairs(tab) do
ins[key] = var
end
return ins
end function copy(dist,tab)
for key, var in pairs(tab) do
dist[key] = var
end
end People ={} function People.sayHi(self)
print("People sayHi"..self.name) -- .. 表示字符串连接
end People.new = function(name)
local self = clone(People)
self.name = name return self
end
--
--local p = clone(People)
--p.sayHi() local p = People.new("Jinpp")
-- p.sayHi(p) -- 运行结果 People sayHiJinpp
p:sayHi() -- 运行结果 People sayHiJinpp -- 类的继承
Man = {}
Man.new = function(name)
local self = People.new(name)
copy(self,Man)
return self
end
--
Man.sayHello = function()
print("Man say Hello")
end -- 函数的重写
Man.sayHi = function(self)
print("Man sayHi "..self.name)
end local m = Man.new("Lisi")
m:sayHello()
m:sayHi()

蛮简单的特别好理解。2016年01月24日21:43:39