Lua的多重继承
Lua的多重继继承
code继承的实现
local function search (k, plist) for kk, vv in pairs(plist) do local v = vv[k] -- try `i'-th superclass if v then return v end end end function createClass (p) local c = {} -- new class c.super = p; --保留父类,以便可以重用父类的方法 --将当前类的索引知道超类上,本地找不到,向上追溯 setmetatable(c, {__index = function (t, k) local v = search(k, p); t[k] = v; return v; end}) -- prepare 'c' to be the metatable of its instances c.__index = c -- define a new constructor for this new class function c:new (o) o = o or {} setmetatable(o, c) o:init(); return o end return c end
2.生成一个新类 和 生成一个新对象
--生成一个新类 c1 = createClass({}) --下面是c1的方法 --在这里初始化c1的属性,这些是每个对象不同的属性 function c1:init() self.a = 100; self.b = {a = 100}; end function c1:method(a, b) print('c1:method(a, b)'); print('a + b = ', a + b); print('self=', tostring(self)); return a + b; end --静态table属性值,所有对象公用 c1.names = {12, 3, 4, 5, 6}; --生成对象 o1 = c1:new()
2.继承举例
c2 = createClass({c1 = c1});
function c2:method(a, b)
print('c2:method(a, b)');
return self.super.c1.method(self, a, b); --调用父类的方法,注意,需要传递self参数
end
--创建c2对象o2
o2 = c2:new()
3.多重继承
c3 = createClass({c1=c1, c2=c2})
function c3:method(a, b)
print('c3:method(a, b)');
self.super.c1.method(self, a, b);
self.super.c2.method(self, a, b);
end
o3 = c3:new();
浙公网安备 33010602011771号