lua实现类与继承,多继承

--采用闭包方式实现类的概念--
--eg: 创建一个 Person类
local function Person()
	local tab = {
		high = 0,
		wight = 0,
			
	}

	function tab:PerMessage()
		print(self.high,self.wight);
	end

	return function()
		return tab;
	end
end

function createPerson(high,wight)
	
	local func_itor = Person();
	local per_obj = func_itor();
	per_obj.high = high;
	per_obj.wight = wight;

	return per_obj;
end

local per1 =createPerson(100,200);
local per2 =createPerson(111,2323);
local per3 =createPerson(32,33);
print(type(per1));
per1:PerMessage();
per2:PerMessage();
per3:PerMessage();
--********************************************************************************

--采用元表的方式实现类的概念
--定义一个Son 类
local Son = {};
Son.father = "";
Son.age = 0;

function Son:setSonMessage(m_father,m_age)
	self.father = m_father;
	self.age    = m_age;
end

function Son:SonMessage()
	print(self.father,self.age);
end

function createSon(Son_father,Son_age)
	local son_obj = {};
	setmetatable(son_obj,{__index = Son});
	son_obj:setSonMessage(Son_father,Son_age);

	return son_obj;
end

local son1 = createSon("张三",4);
local son2 = createSon("李四",2);
local son3 = createSon("王五",10);

son3:SonMessage();
son2:SonMessage();
son1:SonMessage();

--********************************************************************************

--lua 实现继承的概念   
--[[*****************--
	继承与多继承就是让__index能遍历多个 表 找出正确表对应的元素

--*****************--]]
local function super(key,list)
	for i,v in ipairs(list) do
		local table = list[i];
		local var = table[key]
		if var then
			return var;
		end
	end
	return nil;
end
local GrandSon = {};
GrandSon.mess = "I have mess jiu zou le a mian dui nimen de kuang" 

function createGrandSon()
	local grandson_obj = {};
	local baseClass = {GrandSon,Son};--要继承的类
	setmetatable(grandson_obj,{__index = function(t,k)--function(t,k)为lua解释器机制-当__index指向的是函数时,默认有两个参数,第一个为table,第二个为要查找的key
		return super(k,baseClass);
	end});
	return grandson_obj;
end

local SS_1 = createGrandSon();
SS_1:setSonMessage("SSSDIOW",12)
SS_1:SonMessage();
print(SS_1.mess);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值