首页 > 代码库 > 9----Lua中的面向对象

9----Lua中的面向对象

什么是面向对象?

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

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

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

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

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

        但需注意的是,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) --otable类型的参数
  15.     o=o or {} --如果onil则创建一个空的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中的面向对象