--实现类
Class = {x=0, y=0} --类的声明,这里声明了类名还有属性,并且给出了属性的初始值
Class.__index = Class --设置元表的索引,想模拟类的话,这步操作很关键
function Class:new(x,y) --构造方法,构造方法的名字是随便起的,习惯性命名为new()
local t = {} --初始化t,如果没有这句,那么类所建立的对象如果有一个改变,其他对象都会改变
setmetatable(t, Class) --将t的元表设定为Class
t.x = x --属性值初始化
t.y = y
return t --返回自身
end
function Class:test()
print(self.x, self.y)
end
function Class:add()
self.x = self.x + 1
self.y = self.y + 1
end
--实现继承
SubClass = {z=0}
setmetatable(SubClass, Class)
SubClass.__index = SubClass
function SubClass:new(x,y,z)
local t = {} --初始化对象自身
t = Class.new(x,y) --将对象自身设定为父类,这个语句相当于其他语言的super 或者 base
setmetatable(t, SubClass) --将对象自身元表设定为SubClass类
t.z = z --新的属性初始化,如果没有将会按照声明=0
return t
end
function SubClass:go()
self.x = self.x + 10
end
--重定义父类的方法,相当于override
function SubClass:test()
print(self.x, self.y, self.z)
end
--实现多态
local a = Class.new()
a:add()
a:test()
a = SubClass.new()
a:add()
a:go()
a:test()
--运行结果:
-- 1 1
-- 11 1 0
在Lua中实现面向对象特性——模拟类、继承、多态
最新推荐文章于 2024-04-01 18:57:28 发布