面向对象特征
- 1、 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。
- 2、继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。
- 3、多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
- 4、抽象:抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。
Lua 中面向对象
Lua本身不支持面向对象
对象由属性和方法组成。LUA中最基本的结构是table,所以需要用table来描述对象的属性。
lua 中的 function 可以用来表示方法。那么LUA中的类可以通过 table + function 模拟出来。
至于继承,可以通过 metetable 模拟出来(不推荐用,只模拟最基本的对象大部分时间够用了)。
Lua 中的表不仅在某种意义上是一种对象。像对象一样,表也有状态(成员变量);也有与对象的值独立的本性,特别是拥有两个不同值的对象(table)代表两个不同的对象;一个对象在不同的时候也可以有不同的值,但他始终是一个对象;与对象类似,表的生命周期与其由什么创建、在哪创建没有关系。
实现简单的一个lua面向对象
t={a='name'}
t1 = t
t1.a='name2'
print(t.a)--因为t跟t1都是指向同一个table,所以修改t1等同于修改t里面的值
--实现一个简单面向对象
--封装
-- 在lua中复杂数据结构都是使用表来表现的
-- 面向对象 类 也是基于table表现
--新建一个对象
--对于一个对象来说,有属性、方法
--方法1
-- person = {name='lin',age=18}
-- person.eat = function()
-- print(person.name..' eat')
-- end
--方法2
-- person = {
-- name = 'lin',
-- age = 18,
-- eat = function()
-- print(person.name..' eat')
-- end
-- }
--方法三
person = {
name = 'lin',
age = 18,
}
function person.eat()
print(person.name..' eat')
end
person.eat()