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

posted @ 2021-10-08 22:29  小紫苏  阅读(419)  评论(0编辑  收藏  举报