Lua学习笔记(六)

Lua面向对象

封装

-- 元类
People={isHumen=true}		-- 此处定义的元素都是相当于C++的静态成员变量

-- 基类方法new
function People:new(o,n,a)
	o=o or {}
	setmetatable(o,self)	-- self相当于C++的this指针,但是这里指代的是元类People而不是对象o
	self.__index=self
	o.name=n				-- 用self代替o相当于C++中给静态成员变量赋值
	o.age=a
	return o
end

-- 基类元方法__tostring
function People:__tostring()
	local sum="名字为:"..self.name.."
年龄为:"..self.age -- 此处self指代的是实际调用时的对象
	return sum
end

-- 基类方法walk
function People:walk()
    print("我正在走!")
end

-- 创建对象
me=People:new(nil,"Jaxes",21)

-- 调用对象中的函数
print(me)		-- 等价于print(tostring(me))
me:walk()		-- 等价于me.walk(me)

继承

-- 类Worker派生自People类
Worker=People:new()

-- 派生类
function Worker:new(o,n,a,id)
	o=o or People:new(o,n,a)
	setmetatable(o,self)
	self.__index=self
	o.id=id
	return o
end

function Worker:__tostring()
	local sum=People.__tostring(self)
	sum=sum.."
ID为:"..self.id
	return sum
end

worker=Worker:new(nil,"kaka",55,01)
print(worker)
worker:walk()		-- 继承自父类函数walk

多态

这个部分暂时还不清楚怎么搞,暂时做为后续储备内容

原文地址:https://www.cnblogs.com/JaxesZ/p/11217032.html