lua中的面向对象模拟,类、继承、多态

本文通过两个Lua脚本文件的实例,展示了如何在Lua中实现面向对象编程,包括类的定义、继承、方法覆盖等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

test1.lua

 1 --这里声明了类名,并且给出了属性的初始值
 2 Class = {x=0,y=0}
 3 --这句话是冲定义元表的索引,就是说有了这句,这才是一个类
 4 Class.__index=Class
 5 --构造体
 6 function Class:new(x,y)
 7     local self={}--初始化self,如果没有这句,那么类所建立的对象改变,其他对象都回改变
 8     setmetatable(self,Class)--将self的元表设定为Class
 9     self.x=x--属性初始值
10     self.y=y
11     return self--返回自身
12 end
13 --设定类的其他方法
14 function  Class:test()
15     print(self.x,self.y)
16 end
17 
18 function Class:plus()
19     self.x=self.x+1
20     self.y=self.y+1
21 end
22 
23 function Class:gto()
24     return 100
25 end
26 
27 function Class:gio()
28     return self:gto()*2
29 end

test2.lua

 1 require "test1"
 2 --声明了新的属性Z
 3 Main = {z=0}
 4 --设置类型是Class
 5 setmetatable(Main,Class)
 6 --还是和类定义一样,表索引设定为自身
 7 Main.__index=Main
 8 --这里是构造体,看,加上了一个新的参数
 9 function Main:new(x,y,z)
10     local self={}--初始化对象自身
11     self=Class:new(x,y)--将对象自身设定为父类,这个语句相当于其他语言的super
12     setmetatable(self,Main)--将对象自身元表设定为Main类
13     self.z=z--新的属性初始化,如果没有将会按照声明=0
14     return self
15 end
16 --定义一个新的方法
17 function Main:go()
18     self.x=self.x+10
19 end
20 --重定义父类的方法
21 function Main:test()
22     print(self.x,self.y,self.z)
23 end
24 --重新定义了gto()
25 function Main:gto()
26     return 50
27 end
28 
29 a=Class:new(10,20)
30 print(a:gio())
31 b=Main:new(10,50,200)
32 print(b:gio())
33 print(a:gio())

输出的结果是:

200
100
200

转载于:https://www.cnblogs.com/xiaoxiangmomo/p/4246174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值