Lua实现类继承_Lua

mulInherit.lua

复制代码 代码如下:

--[[
author:looyer@sina.com
date:2014/7/18
purpose:lua的继承演示
--]]
--- base class "Object"
local Object = {_t = "Object"}
function Object:new(id)
    local o =
    {
        _id = id
    }
    setmetatable(o, self)
    self.__index = self
    return o
end
function Object:type()
    return self._t
end
function Object:id()
    return self._id
end
--- class "Widget" driver from "Object"
local Widget = {_t = "Widget"}
setmetatable(Widget, Object)
function Widget:new(id)
    local o =
    {
        _id = id,
    }
    setmetatable(o, self)
    self.__index = self
    -- function (tb, key)
    --  return self[key]
    -- end
    return o
end
-- function Widget:id()
--  return self._id
-- end
--- class "Drawor" driver from "Object"
local Drawor = {_t = "Drawor"}
setmetatable(Drawor, Object)
function Drawor:new(id, name)
    local o =
    {
        _id = id,
        _name = name,
    }
    setmetatable(o, self)
    self.__index = self
    return o
end
function Drawor:name()
    return self._name
end
--- class "DrawPlane" driver from "Widget" and "Drawor"
local DrawPlane = {_t = "DrawPlane", _father = {Widget, Drawor}}
function DrawPlane:new(id)
    local o =
    {
        _id = id,
    }
    setmetatable(o, self)
    self.__index =
    function (tb, key)
        if self[key] then return self[key] end
        for _, v in pairs(self._father) do
            if v._t == key then return v end
            if v[key] then return v[key] end
        end
    end
    return o
end
local varA = Object:new()
local varB = Widget:new(10)
local varC = Drawor:new(30, "dwr")
local varD = DrawPlane:new(51)
print("varA type:", varA:type())
print("varB type:", varB:type())
print("varB._id: ", varB._id, varB:id())
print("varC name: ", varC:name())
print("varD type: ", varD:type())
print("varD id: ", varD:id())
print("varD father Widget--", varD.Widget:type())

以上就是本文所要分享的代码了,希望大家能够喜欢。

时间: 2024-12-25 17:19:53

Lua实现类继承_Lua的相关文章

Lua实现类与继承的实例详解

Lua中没有类的概念,但可以通过table.函数以及一些语言特性来模拟类.table的值可以为函数.看下面这段代码: LogUtil = {msg_prefix = string.format("%s ", os.date("%H:%M:%S", os.time())) } LogUtil.write = function(msg)     print(LogUtil.msg_prefix .. msg .. "\r\n") end   LogU

Lua程序设计(四)面向对象类继承

1.类继承  ①代码 Sharp = { _val = 1} --① 父类 function Sharp:new() local new_sharp = { } self.__index = self --②,self == Sharp setmetatable(new_sharp, self) --③ return new_sharp end function Sharp:sharp_func() print("Sharp call sharp_func") end function

Lua中类的实现_Lua

概述      一个类就是像是一个创建对象的模具,对于Lua这种没有类的概念的语言,为了模拟类,方法是为要创建的对象制定一个原型(prototype).这个原型相当于其他语言中的类.但是原型同时也是一种常规的对象,当其他的对象(看成是原型的实例)遇到一个未知的操作时,就会去原型中查找.因此,在Lua这种没有类的语言中,为了表示一个类,只需创建一个专用作其他对象的原型.类和原型都是一种组织对象间共享行为的方式.本文将在Lua中模拟类,相关的代码可以在我的github上直接运行.  实现  在Lua

浅谈Lua的面向对象特性_Lua

 面向对象的特性     类: 类是可扩展的模板用来创建对象,提供状态的初始值(成员变量)和行为的实现.     对象: 它是类的实例并具有分配给自己独立的内存.     继承: 它是由变量和类的函数被其他类继承的概念.     封装: 它是将数据和函数相结合的一类内的方法.数据可以在类的外部与函数的帮助下进行访问.它也被称为数据抽象. Lua的OOP 在Lua中实现面向对象与表和Lua的第一类函数.通过将函数和相关数据插入表中形成一个对象.继承可以在metatables的帮助下来实现,提供了一

c++-类继承方面的问题,求教

问题描述 类继承方面的问题,求教 class A{ public : A* a; A(){a = this;}};class B : public A{public: B(){};}; void main(){ B* b = new B;; cout<< b << "" "" << b->a <<endl; getchar();} 为什么两次输出的结果是一样的,都是指向,A类对象在创建的时候,b还不存在,this

javascript类继承的一些实验

其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个 函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话就很麻烦(不好意思,对于我这种新手,开始还是一般用func比较高效率···).所以 就决定开始要用object来编程才能更省事,下面就是我看了一些博客文章关于类的见解,有什么不对的希望各位可以多多给些指点: 对于类的编程,声明的方法有如下几种:1.var test = function(){};2

Microsoft .NET 中的基类继承

接口继承 创建抽象类时,请使用关键字 Interface 而不是 Class.为接口命名,然后定义需要子类实现的所有属性和方法.这是因为基类中没有可以实现的属性和方法,它只包含一般数据,而不包含方法.您所创建的只是一个合约,它规定所有使用此接口的子类都必须遵循一定的规则. 1.        现在,请在已创建的项目中添加一个新类. 2.        从 Visual Studio 菜单中,单击 Project(项目),然后单击 Add Class(添加类). 3.        在类中添加以下

Microsoft .NET 中的基类继承(2)

现在,请在已创建的项目中添加一个新类. 从 Visual Studio 菜单中,单击 Project(项目),然后单击 Add Class(添加类). 在类中添加以下代码:Interface Person   Property FirstName() As String   Property LastName() As StringSub Print()   Sub Talk()End Interface您会发现,您定义属性和子过程的方法与您通常定义这些属性和过程的方法一样.唯一的差别在于,您没

Thrift的TProtocol类体系原理及源码详解:类继承架构分析

这部分相关的类主要实现与协议相关的内容,这里说的协议是指对数据传输格式封装的协 议,实现不同的协议来适合不同场景下的数据传输,因为在不同的场景下不同协议对于数据 传输来说效率有很大的差别.下面是这个部分相关类的类关系图: 由以上类图可以发现所有的协议类都从TProtocol类直接或间接继承,每一个协议 类都有一个对应的生产对象工厂(协议工厂).TProtocol是一个抽象的类,不能直接使用的 ,它有一个直接子类默认实现了所有方法(空实现),如果我们需要定义自己的数据传输协 议可以直接从这个类继承