9----Lua中的面向对象
什么是面向对象?
使用对象、类、继承、封装、消息等基本概念来进行程序设计
面向对象最重要的两个概念就是:对象和类
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位
一个对象由一组属性和对这组属性进行操作的一组函数组成
类是具有相同属性和函数的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和函数两个部分
但需注意的是,Lua中并没有提供类的定义能力,但可以把table类型变量当成对象来使用
Lua中的对象
在Lua中 我们将table类型变量当初对象,对象具有数据和操作
- student= {
- name,
- age
- }
- function student:tostring() -- 冒号表示将本身带入进去作为对象,用self代表自身,类似于java中的this
- print("name:".. self.name .. " age:" .. self.age)
- end
- function student:setName(name)
- self.name=name
- end
- function student:setAge(age)
- self.age=age
- end
- local stu=student
- stu:setAge(18) -- 冒号表示将本身带入进去作为对象,用self代表自身,类似于java中的this
- stu:setName("JONY")
- stu:tostring()
- –输出结果如下
- name:JONY age:18
类的实现
类是对象的模板,一个类能产生多个对象。
实现类的思想是将Student作为原模版,通过Student来创建其它的对象,那么我们就可以把Student当作类了
创建的对象遇到一个未知的操作时,就会在Student原型中去查找,这也符合了类的继承原则
- local student= {
- name,
- age,
- }
- function student:tostring()
- print("name:".. self.name .. " age:" .. self.age)
- end
- function student:setName(name)
- self.name=name
- end
- function student:setAge(age)
- self.age=age
- end
- function student:creat(o) --o是table类型的参数
- o=o or {} --如果o为nil则创建一个空的table
- setmetatable(o,self) --元表,即把self设置为 o的元表,每一个table都可以添加元表,元表可以改变相应的table的行为
- self.__index=self --首先在当前对象中查找操作,如果当前对象中没有,就会到原型student(元表)中查找操作
- return o
- end
- --[[
- local stu=student:creat() --通过student原型(类)创建stu对象
- stu:setAge(18)
- stu:setName("JONY")
- stu:tostring()
- student:tostring() --原型并没有被复制,运行报错,说明stu是一个子对象
- --得到的结果是:
- --name:JONY age:18
- --]]
- --[[
- local stu=student --只是简单的将student指向stu
- stu:setAge(18)
- stu:setName("JONY")
- stu:tostring()
- student:tostring() --也能得到结果,说明对原型进行了操作并没有类的实现
- --得到的结果是:
- --name:JONY age:18
- --name:JONY age:18
- --]]
9----Lua中的面向对象的更多相关文章
- Cocos2d-x 脚本语言Lua中的面向对象
Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...
- lua中的面向对象编程
简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 上述代码会输出tb1 ~= tb2.说明两个具有相同值得对象是两个不同的对象,同时在Lua中table是引用类型的 ...
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...
- 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
[游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态 阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...
- Lua中的面向对象编程详解
简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码代码如下: local tb1 = {a = 1, b = 2}local tb2 = {a = 1, b ...
- lua 中的面向对象
lua 是一种脚步语言,语言本身并不具备面向对象的特性. 但是我们依然可以利用语言的特性,模拟出面向对象的特性. 面向对象的特性通常会具备:封装,继承,多态的特性,如何在lua中实现这些特性,最主要的 ...
- 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...
- Lua 中使用面向对象(续)
上一篇文章给了一个面向对象的方案,美中不足的是没有析构函数 Destructor,那么这一次就给它加上. 既然是析构,那么就是在对象被销毁之前做该做的事情,lua 5.1 的 userdata 可以给 ...
- Lua中的userdata
[话从这里说起] 在我发表<Lua中的类型与值>这篇文章时,就有读者给我留言了,说:你应该好好总结一下Lua中的function和userdata类型.现在是时候总结了.对于functio ...
随机推荐
- xml案例(考生成绩管理系统)
package itacst.dao; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node ...
- symmetric multiprocessor
https://en.wikipedia.org/wiki/Symmetric_multiprocessor_system A symmetric multiprocessor system (SMP ...
- 用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- json转换对象 对象属性首字母为大写会出错 可以用以下方法
package open_exe; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.u ...
- win7下用mklink命令解决delphiXE系列占用C盘空间的问题
DelphiXE从2010以后, 安装程序安装完成后都会在ProgramData目录里复制一份安装程序的备份, 随着版本升级安装包越来越大, 占用C盘的空间也就越来越大 虽然可以通过删除的方式删掉, ...
- 【译】在ASP.Net和IIS中删除不必要的HTTP响应头
引入 每次当浏览器向Web服务器发起一个请求的时,都会伴随着一些HTTP头的发送.而这些HTTP头是用于给Web服务器提供一些额外信息以便于处理请求.比如说吧.如果浏览器支持压缩功能,则浏览器会发送A ...
- java线程生命周期及其对应方法
http://blog.sina.com.cn/s/blog_a8aa82cc0101ktrm.html http://wenku.baidu.com/view/c242df69011ca300a6c ...
- ios数据库常用sql语句
SQlite常用语句 由于sql语句在程序代码中以字符串的形式存在,没有代码提示,不细心很容易出错,而且不容易被查出来.sql语句字符串是单引号. 写sql语句的时候一定要细心呀.如果写不好可以找公司 ...
- Matlab代码备忘
1.Matlab写入文件 set(hp1,'xdata',bbb(1,:),'ydata',bbb(2,:),'zdata',bbb(3,:)); M=size(bbb,2); name=strca ...
- 再叙TIME_WAIT
之所以起这样一个题目是因为很久以前我曾经写过一篇介绍TIME_WAIT的文章,不过当时基本属于浅尝辄止,并没深入说明问题的来龙去脉,碰巧这段时间反复被别人问到相关的问题,让我觉得有必要全面总结一下,以 ...