lua学习---面向对象编程

在C#中,如果定义了一个Person类,可以直接申明Person类型的变量。

但在lua中,没有类一说,能用到的就是表,可以通过元表的形式实现类的形式。先上代码:

1.类的对象的声明:

Person={name="",age=0}
function Person:showinfo()
print(self.name,self.age)
end
function Person:new(o)
local t=o or{}
setmetatable(t,{__index=Person})
return t
end
p1=Person:new()
p1:showinfo()

可以将Person表作为新建表的元表。Person:new()相当于一个构造函数,因为在lua中本质上类就是表。这样的话,既可以继承Person中的所有属性,又可以在不破坏Person的前提下,对里边的属性重新赋值。

注意此处对方法的申明用的是冒号:。这样做好处在于可以通过self参数直接访问表中的属性,如果用点.,就需要将表作为参数进行赋值。

2.类的继承:

比如上述中定义了Person类,而Person又可以往下延申为Student类和Teacher类,Student中有Person所有的属性,也包括新的年级属性。这就达到了继承的作用。此处最重要的一步在于使用Student:new()来实现继承。代码如下:

Student=Person:new()
Student.grade=1
stu1=Student:new()
stu1.name="erxiao"
stu1:showinfo()

Student:new()中,实际上Student并没有new方法,它会找它的元表中的new方法。最终实现的继承就是Student是stu1的元表,Person是Student的元表。属性之间的继承就可以实现了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值