lua面向对象实现的(记)

 

Lua中实现面向对象用的是元表的机制,元表与表是不同的个体,创建table时,不会自动创建元表。不过任何的表都可以有元表。

setmetatable(table1,table2):table2会做为table1的元表,同时有一个返回值table1.

__index方法,这个是元表中的元方法,它有回溯的功能,可以查找table中的属性,找不到相关属性会返回nil.找到就会返回相应的值。

__index的值可以是一个方法,也可以是一个表,表又可能具有表有的特性。

写下实现面向对象的思路:

首先是类的特点,继承。

我们可以先定义一个父类Parent

Parent = {
    x = 10,
    y = 20
}
function Parent( t ) 
{
   local t = t or {}
   self.__index = self    
   setmetatable( t, self )    
   return tend


 } 

Parent有两个属性,new方法是实例出一个对象,这个对象同时也是个类,为什么呢?我们分析一下:

1.把元方法指向自己
self.__index = self
2.设置元表也是自身
 setmetatable( t, self )
3.最后返回这个对象
return t
我们可以先试验证一下
Child = Parent:new()
print(Child.x)
--10
我们得到一个对象Child,Child访问变量x,在自身找不到变量,Child就会去元表里查找有没有值,找到就会去找元方法的引用,此时到达Parent,Parent里有x,就返回x的值,但是Child里是没有x,系统就会构造一个变量来接收Parent的x,这样Child自身虽然没有x这个变量,但是他还是能通过元表与元方法得到Parent的x值,这不正是继承了吗?
同时,Child也是一个类,因为在new的时候,Child也返回了一个指向身的原型,所以Child也有Parent的功能,所以我们可以这样访问:
Child2 = Child2.new()
print(Child2.x)
--10
这样我们就能实现一条长长的继承链
我们还可以在子类覆盖父类的方法与成员变量,也就是重载,这个其实很简单了,我们已经实现继承就好办了直接上代码:
Child2 = Child2.new()
self.x = 20
print(Child2.x)
--20
直接更改赋值就行。
Lua的灵活与强大难以致信,对Lua的学习还要加油!!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值