美文网首页
Lua单继承与多继承理解

Lua单继承与多继承理解

作者: Roling | 来源:发表于2016-11-17 11:44 被阅读0次

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

相关文章

  • Lua单继承与多继承理解

    Lua不具有面向对象、继承等高级语言的属性,但是借助万能的table,仍然可以模拟实现面向对象继承的特性。这里先要...

  • Python所学----python高级(中)

    一. 单继承 、多继承、多态,重写与父类 1.单继承、就是子类继承父类的属性与方法 2.多继承、就是子类继承多个父...

  • iOS 中几种多继承的实现方式

    单继承与多继承概念 继承是面向对象的基本特征之一,在具体语言的语法上设计有两种形式:多继承与单继承。 单继承 一个...

  • iOS 多继承实现方式

    一、单继承与多继承概念 继承是面向对象的基本特征之一,在具体语言的语法上设计有两种形式:多继承与单继承。 1.单继...

  • Java面向对象三大特性之继承

    继承 一、继承的特点 Java只支持单继承单继承 多继承 单继承、多继承优缺点①单继承优点:提高了代码的复用性,让...

  • Python-学习之路-08 OOP -02

    单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类可以继承多个类 单继承的多继承的优缺点 菱形继承/钻石...

  • 继承(单继承,多继承)

    将共性的内容放在父类中,子类只需要关注自己特有的内容 python中所有的内容都是对象,所有的对象都直接或间接继承...

  • dart: mixin

    最近用到了Mixin,记录一下使用特性: Mixin可以理解为另辟捷径的多继承实现。与单继承兼容,是继承能力的一种...

  • 继承与派生

    1,父类与子类,单继承与多继承 2、为何要用继承:用来解决类与类之间代码冗余问题 3,如何实现继承 4,属性查找 ...

  • 类和接口

    类与类的关系 继承关系,只能单继承,但是可以多层继承 类与接口的关系 实现关系,可以单实现,也可以多实现,还可以在...

网友评论

      本文标题:Lua单继承与多继承理解

      本文链接:https://www.haomeiwen.com/subject/ugedpttx.html