Lua面向对象

最后更新于 2023-02-20 535 次阅读


对象

  • 表table就是一个对象,对象具有了标识self,状态等相关操作
  • 使用参数self表示方法的该接受者是对象本身,是面向对象的核心点,冒号操作符可以隐藏该self参数

  • 每个对象都有一个原型,原型(lua类体系)可以组织多个对象间共享行为
  • setmetatable(A,{__index=B}) 把B设为A的原型

继承

  • Lua中类也是对象,可以从其他类(对象)中获取方法和没有的字段
  • 继承特性:可以重新定义(修改实现)在基类继承的任意方法
  • 多重继承:一个函数function用作__Index元方法,实现多重继承,还需要对父类列表进行查找方法,但多继承复杂性,性能不如单继承,优化,将继承的方法赋值到子类当中
  • 私有性(很少用)基本思想:两个表表示一个对象,第一个表保存对象的状态在方法的闭包中,第二个表用来保存对象的操作(或接口),用来访问对象本身。使第一个表完成内容私有性。