什么是面向对象?

使用对象、类、继承、封装、消息等基本概念来进行程序设计

面向对象最重要的两个概念就是:对象和类

对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位

一个对象由一组属性和对这组属性进行操作的一组函数组成

类是具有相同属性和函数的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和函数两个部分

但需注意的是,Lua中并没有提供类的定义能力,但可以把table类型变量当成对象来使用

Lua中的对象

在Lua中 我们将table类型变量当初对象,对象具有数据和操作

  1. student= {
  2. name,
  3. age
  4. }
  5. function student:tostring() -- 冒号表示将本身带入进去作为对象,用self代表自身,类似于java中的this
  6. print("name:".. self.name .. " age:" .. self.age)
  7. end
  8. function student:setName(name)
  9. self.name=name
  10. end
  11. function student:setAge(age)
  12. self.age=age
  13. end
  14. local stu=student
  15. stu:setAge(18) -- 冒号表示将本身带入进去作为对象,用self代表自身,类似于java中的this
  16. stu:setName("JONY")
  17. stu:tostring()
  18. –输出结果如下
  19. name:JONY age:18

类的实现

类是对象的模板,一个类能产生多个对象。

实现类的思想是将Student作为原模版,通过Student来创建其它的对象,那么我们就可以把Student当作类了

创建的对象遇到一个未知的操作时,就会在Student原型中去查找,这也符合了类的继承原则

  1. local student= {
  2.     name,
  3.     age,
  4. }
  5. function student:tostring()
  6.     print("name:".. self.name .. " age:" .. self.age)
  7. end
  8. function student:setName(name)
  9. self.name=name
  10. end
  11. function student:setAge(age)
  12. self.age=age
  13. end
  14. function student:creat(o) --o是table类型的参数
  15. o=o or {} --如果o为nil则创建一个空的table
  16.     setmetatable(o,self) --元表,即把self设置为 o的元表,每一个table都可以添加元表,元表可以改变相应的table的行为
  17. self.__index=self --首先在当前对象中查找操作,如果当前对象中没有,就会到原型student(元表)中查找操作
  18.     return o
  19. end
  20. --[[
  21. local stu=student:creat() --通过student原型(类)创建stu对象
  22. stu:setAge(18)
  23. stu:setName("JONY")
  24. stu:tostring()
  25. student:tostring() --原型并没有被复制,运行报错,说明stu是一个子对象
  26. --得到的结果是:
  27. --name:JONY age:18
  28. --]]
  29. --[[
  30. local stu=student --只是简单的将student指向stu
  31. stu:setAge(18)
  32. stu:setName("JONY")
  33. stu:tostring()
  34. student:tostring() --也能得到结果,说明对原型进行了操作并没有类的实现
  35. --得到的结果是:
  36. --name:JONY age:18
  37. --name:JONY age:18
  38. --]]

9----Lua中的面向对象的更多相关文章

  1. Cocos2d-x 脚本语言Lua中的面向对象

    Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...

  2. lua中的面向对象编程

    简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 上述代码会输出tb1 ~= tb2.说明两个具有相同值得对象是两个不同的对象,同时在Lua中table是引用类型的 ...

  3. Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

  4. 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    [游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态   阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...

  5. Lua中的面向对象编程详解

    简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码代码如下: local tb1 = {a = 1, b = 2}local tb2 = {a = 1, b ...

  6. lua 中的面向对象

    lua 是一种脚步语言,语言本身并不具备面向对象的特性. 但是我们依然可以利用语言的特性,模拟出面向对象的特性. 面向对象的特性通常会具备:封装,继承,多态的特性,如何在lua中实现这些特性,最主要的 ...

  7. 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...

  8. Lua 中使用面向对象(续)

    上一篇文章给了一个面向对象的方案,美中不足的是没有析构函数 Destructor,那么这一次就给它加上. 既然是析构,那么就是在对象被销毁之前做该做的事情,lua 5.1 的 userdata 可以给 ...

  9. Lua中的userdata

    [话从这里说起] 在我发表<Lua中的类型与值>这篇文章时,就有读者给我留言了,说:你应该好好总结一下Lua中的function和userdata类型.现在是时候总结了.对于functio ...

随机推荐

  1. 同时使用python2和Python3

    问题:thrift生成的是python2代码,之前使用的是Python3因此需要同时使用两个版本. 方案:将python3的可执行文件重命名为python3(默认为Python),这样使用pyhton ...

  2. ThinkPHP 3.2.3 中设置和使用 Session

    Session 的配置 可以在 config.php(可以是应用公用的 config.php 或模块的 config.php)中对 Session 进行配置,例如: config.php <?p ...

  3. 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理

    1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...

  4. Convert Sorted Array to Binary Search Tree || LeetCode

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * s ...

  5. AD6电气规则错误报告中英文对照

    Ⅰ:Error Reporting 错误报告 A:Violations Associated with Buses 有关总线电气错误的各类型(共 12 项) ◆ bus indices out of  ...

  6. LightOj 1213 - Fantasy of a Summation(推公式 快速幂)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1213 #include <stdio.h> int cases, case ...

  7. 跳转至指定ViewController

    有些情况下,并不是简单的push pop,需要连跳几个VC,可以用下面的方法: for(UIViewController * vc in self.navigationController.child ...

  8. iOS:命令行方式使用OSChina托管私有代码

    一.介绍 在项目开发中,使用版本控制工具是必不可少的开发工具,它可以帮助我们程序员写完代码后及时提交备份,防止因个人操作导致代码被误删除了或者丢失了,安全可靠.同时,使用版本控制器工具也可以很方便的进 ...

  9. 去bom头

    function rewrite ($filename, $data) { $filenum = fopen($filename, "w"); flock($filenum, LO ...

  10. PythonDay02

    >三目运算符 简单的if---else---语句 result = 1234 if 1 > 2 else 4321 print(result) >集合 set集合,是一个无序且不重复 ...