lua面向对象之类和继承浅析

lua面向对象之类和继承浅析

ID:28446401

大小:76.00 KB

页数:6页

时间:2018-12-10

lua面向对象之类和继承浅析_第1页
lua面向对象之类和继承浅析_第2页
lua面向对象之类和继承浅析_第3页
lua面向对象之类和继承浅析_第4页
lua面向对象之类和继承浅析_第5页
资源描述:

《lua面向对象之类和继承浅析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Lua面向对象之类和继承浅析这篇文章主要介绍了Lua面向对象之类和继承浅析,本文讲解了一些Lua面向对象的一些知识,需要的朋友可以参考下Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,如下:代码如下:Account={balance=O}functionAccount.withdraw(v)Account.balance=Account.balance-vend--下面是测试调用函数Account,withdraw(100.00)在上面的withdraw函数内部依赖全局变量Account,一旦发生改变,将会导致withdraw不能正常工作,如:代

2、码如下:a=Account:Account=nila.withdraw(100.00)—将会导致访问空nil的错误。这种行为明显违反了面向对象封装性和实例独立性。要解决这一问题,我们需要给withdraw函数再添加一个参数self,他等价于java/C++中的this,如下:代码如下:functionAccount.withdraw(self,v)self,balance=self.balance-vend-下面是基于修改后代码的调用:al=Account;Account=nilal.withdraw(al,100.00)—正常工作。针对上述问题,lua提供了一种更为便

3、利的语法,即将点(.)替换为冒号(:),这样可以在定义和调用函数时隐藏参数。如:代码如下:functionAccount:withdraw(v)self,balance=self.balance-vend--调用代码可改为:a:withdraw(100.00)1、类:lua中再语言上并没有提供面向对象的支持,因此想实现该功能,我们只能通过table来模拟,如下:代码如下:--这里的lovenumber是一个公有成员变量Father={lovenumber=0}new可以视为构造函数functionFather:new(p)p=por{}—如果参数中没有提供table,则

4、创建一个空table一将新对象实例的元表指向Father,这样就可以以Father为模板了setmetatable(p,self)—将Father的_index字段指向自己,以便新对象在找不到指定的key时可以被重定向,即访问Father拥有的keyself._index=selfreturnpendfunctionFather:toStringOprint(〃Ilovemyson!〃)end—Loving被视为公有成员函数functionFather:Loving(v)self,lovenumber=self.lovenumber+v—这里的self表示实例对象本身r

5、eturnself.lovenumberendfl=Father:new{name=//jianjiarT}f2=Father:new{name=〃baba〃,}print(f1:Loving(lOO))print(f2:Loving(200))--输出答案—100--2002、继承继承也是面向对象中一个非常重要的概念,在lua中我们也可以像模拟类那样来实现继承机制。代码如下:Father={lovenumber=0}functionFather:new(p)p=por{}—将新对象实例的元表指向Father,这样就可以以Father为模板了setmetatable(p

6、,self)—将Father的_index字段指向自己,以便新对象在找不到指定的key时可以被重定向,即访问Father拥有的keyself._index=selfreturnpendfunctionFather:toStringOprint(〃Ilovemyson!〃)endfunctionFather:Loving(v)self.lovenumber=self.lovenumber+vreturnself.1ovenumberend—下面派生出Father的一个子类,此时的Son仍为Father的一个对象实例Son=Father:new()--重写Father中的t

7、oString方法,以实现自定义功百匕functionSon:toString()print(〃Ilovemyself!〃)end—在执行下面的new方法时,tables的元表已经是Son了,而不是Fathers=Son:new()print(s:toString())—先在子类Son中找到该方法print(s:Loving(50))—子类中无该方法,则调用父类中该方法输出答案Ilovemyself!

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。