Lua实现面向对象

Lua实现面向对象

Lua本身没有面向对象,但是可以通过function和表来模拟面向对象的过程;

表table

Lua中没有类的概念,可以用table模拟类的用法;

table存放的键值对,可当做class中的字段和方法,都可以存进表中;

首先创建公共方法:复制表中所有的键值对;

function clone(tab)
	local ins = {}
	for key,var in pairs(tab)do
		ins[key] = var
	end
	return ins
end

function copy(dist,tab)
	for k,v in pairs(tab)do
		dist[k] = v
	end
end

实例化对象

可以模拟类的构造函数,写一个new方法;

People是一个类,p为People的对象;

People = {name = ""}

function People.new(name)
	local self = clone(People)
	self.name = name
	return self
end

People.walk = function(self)
	print(self.name.."is walking slowly!")
end

--创建对象
local p = People.new("little Perilla")
p:walk()

继承

创建一个新的表,重写new构造方法,同时拷贝父类中所有的键值对;

--继承
Man = {}
Man.new = function(name)
	local self = People.new(name)
	copy(self,Man)
	return self
end

重写方法

直接暴力重写,同名即可;

--重写方法
Man.walk = function(self)
	print(self.name.." is walking!")
end

--创建对象
local m = Man.new("little Perilla")
m:walk()

最终打印结果如下:

image-20211008222558603

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小紫苏0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值