Lua 面向对象编程 类的封装与继承
来源:互联网 发布:linux 电源按钮 编辑:程序博客网 时间:2024/04/29 05:18
勤奋努力,持之以恒!
表:
Lua中的数据结构,可以存放各种域。
由于Lua中的函数也是第一类值,于是表可以存放属性域和方法域,因此表可以描述一个类。
元表:
元表也是一个表,可以设置给一个本表。
一个表作为元表概念存在的意义在于它可以通过定义自身的一系列元方法来改变本表的行为。
如果一个元表不被设置给一个本表,那么他是没有意义的,一个本表的元表可以是自身。
元方法:
Lua给表预备了一些特殊的行为,这些行为可以通过元方法来定义。
--表,元表,元方法的功能组合起来,可以让lua代码实现面向对象的机制。------------------------- 通过 表table 元表metatable 元方法metamethod 封装一个类------------------------------Base = {} --Base是原型表.一个原型表用来描述一个类,在原型表中填写类方法,类属性则声明在构造函数内的新表中。--实例化对象时,创建一个新表,将新表的元表设置为原型表。--self表示自身,lua本身没有面向对象概念,实现面向对象使用的是table类型,当函数内操作self时相当于使用对象本身。function Base.new(self) --创建一个新表o,类中的成员最好声明在构造函数内的新表中,而方法可以声明在原型表中。 local o = {x = 0, y = 0, t = {h = 0}} --将新表o的元表设置为原型表。 setmetatable(o,self) --[[__index元方法:当访问到表中不存在的域时,将调用其元表的__index元方法(如果该表指定了元表并且元表定义了__index元方法的话)。 如果其元表的__index方法返回一个表中含有该域,则访问该域。]]-- self.__index = self --原型表的__index为原型表。 return oendfunction Base.setXY(self, x, y)--元方法 self.x = x self.y = yend---------------------------------------------------------------------------------------------------------------------------------------------------- 创建一个新类Deriver,使它继承Base类-----------------------------------派生一个类只需要一个原型表的新实例Deriver = Base:new()--Deriver表现在看起来是一个Base原型表的新实例,它的元表是Base,重写Deriver的new方法,在new方法中扩充Deriver的新属性。function Deriver.new(self) local o = getmetatable(self).new(self) o.z = 0 --添加一新属性 return oend-----------------------------------------------------------------------------------------------------------local function myInit() --封装的类实例化 local b1 = Base:new() --b1:setXY(200,300) b1.x = 200 b1.y = 300 b1.t.h = 100 cclog("b1X = %d, b1Y = %d, b1T = %d",b1.x,b1.y,b1.t.h) --[LUA-print] b1X = 200, b1Y = 300, b1T = 100 local b2 = Base:new() b2:setXY(300,400) b2.t.h = 99 cclog("b2X = %d, b2Y = %d, b2T = %d",b2.x,b2.y,b2.t.h) --[LUA-print] b2X = 300, b2Y = 400, b2T = 99 --继承类实例化 local d = Deriver:new() d:setXY(500,600) d.z = 101 d.t.h = 102 cclog("dX = %d, dY = %d, dT = %d, dZ = %d",d.x,d.y,d.t.h,d.z) --[LUA-print] dX = 500, dY = 600, dT = 102, dZ = 101end
0 0
- Lua 面向对象编程 类的封装与继承
- 面向对象编程:封装与继承
- Lua 中的面向对象编程之封装和继承
- 面向对象编程的封装、继承、多态
- 面向对象编程的封装、继承、多态
- lua的面向对象之封装、继承、多态
- cocos2dx-lua中实现面向对象的封装继承
- 面向对象的封装与继承
- Java面向对象的封装与继承
- Lua的面向对象封装
- C语言面向对象编程(一):封装与继承
- C语言面向对象编程(一):封装与继承
- C语言面向对象编程(一):封装与继承
- C语言面向对象编程(一):封装与继承
- Maxscript面向对象编程技术之封装与继承
- C语言面向对象编程(一):封装与继承
- C语言面向对象编程之封装与继承
- C语言面向对象编程之一:封装与继承
- zBar二维码
- 欢刎锹侗匚诚酚芳迟逝灿
- 北滓腿萍亚弊呕技似破纲
- 热北亢傧肆北游欢账屏赋
- 使用Java对文件进行压缩处理
- Lua 面向对象编程 类的封装与继承
- 排序总结
- 佑览淄萍吃掌傧练疾赡爬
- C#的常用正则表达式
- 教你正确挑选移动电源
- 怎样快速在线将pdf文件转换成word
- Sublime Text 3 使用心得
- hbase shell简单讲解
- hdoj.2008 数值统计 20140721