Lua单继承与多继承理解

Lua不具有面向对象、继承等高级语言的属性,但是借助万能的table,仍然可以模拟实现面向对象继承的特性。
这里先要说明两个重要的概念:Metatable(元表)、__index(元方法)
Metatable(元表):是table预定义的一系列的操作,在进行各种table的操作时,若table本身没有,就会去它的元表中寻找。
__index(元方法):元方法是定义该表作为元表(是自身或别的表的元表)时的查找方法。因此,可以通过改变__index元方法,来改变检索之后的结果。
单继承:
只要为子类对象设置metatable,并令其_index成员指向父类即可。
如:

local Base = {}
local Derived = {}
funciton Derived:new()
      local obj = {}
      setmetatable(obj, {__index = Base})
      return obj
end

多继承:
多继承与单继承类似,只不过不是让__index指向一个父类原型,而是令其指向一个搜索的函数,该函数遍历访问子类原型对象多继承的所有父类元原型。
如:

local Base1 = {}
function Base1:new()
      local obj = {}
      setmatatable(obj,{__index = Base1})
       return obj
end

local Base2 = {}
function Base2:new()
       local obj = {}
       setmatatable(obj,{__index = Base2})
       return obj
end

function super(k,list)
       for k,j in ipairs(list) do
              local  ret = j[k]
              if ret then
                    return ret
              end
       end
end

local Derived = {}
function Derived:new()
       local obj = {}
       local base = {Base1, Base2}
       setmetatable(Derived, {__index = function(t, k)
                                            return super(k, base)
                                        end}
       setmatatable(obj,{__index = Derived})
       return obj
end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,203评论 18 399
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,332评论 1 92
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,177评论 0 9
  • 其实天下最难学的既不是语文、数学;也不是小提琴、乐理,而是玩! 如果你问,什么最难学。孩子可能会说:语文、数学、英...
    huahua_088d阅读 478评论 0 0
  • 小柳 看到的每一张合影 旁边总有不同的美女 身份地位带来的一切 旁人如何明了 才华万众瞩目 足以俯瞰众生 每一场酒...
    小柳姐姐阅读 157评论 0 0

友情链接更多精彩内容