—— 面向对象的实现
—— 万物之父 所有对象的基类 Object
— 封装
_Object = {}
— 实例化方法
function Object:new()
local obj = {}
— 给空对象设置元表及index
self.index = self
setmetatable(obj, self)
return obj
end
— 继承
function Object:subClass(className)
— 根据名字生成类(一张表)
_G[className] = {}
local obj = _G[className]
— 实现多态,保存父类(自己)
obj.base = self
— 给子类设计元表及index
self.index = self
setmetatable(obj, self)
end
—— ####实例
— 声明一个新的类
Object:subClass(“GameObject”)
GameObject.posX = 0
GameObject.posY = 0
function GameObject:move()
self.posX = self.posX + 1
self.posY = self.posY + 1
end
— 实例化对象使用
local obj = GameObject:new()
print(obj.posX) —> 0
obj:move()
print(obj.posX) —> 1
local obj2 = GameObject:new()
print(obj.posX) —> 0
obj2:move()
print(obj.posX) —> 1
— 声明一个新的类 Player 继承 GameObject
GameObject:subClass(“Player”)
— 多态,重写GameObject
function Player:move()
— 多态 保留父类原有的Move方法
self.base.move(self) — 注意手动传入self,使用冒号将传入self.base
end
print(“===Player p1===”)
— 实例化Player对象
local p1 = Player:new()
p1:move()
print(p1.posX) —> 1
print(“===Player p2===”)
local p2 = Player:new()
p2:move()
print(p2.posX) —> 1