—— 面向对象的实现
    —— 万物之父 所有对象的基类 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