http://my.oschina.net/u/156466/blog/401576
local class1 = {}
function class1:new()
local obj = {}
setmetatable(obj, {__index= class1})
return obj
end
function class1:print1()
print("class1:print()")
end
function class1:print2()
print("class1:print()")
end
local class2 = {}
function class2:new()
local obj = {}
setmetatable(obj, {__index= class2})
return obj
end
function class2:print2()
print("class2:print()")
end
local class3 = {}
function class3:new()
local obj = {}
setmetatable(obj, {__index= class3})
return obj
end
function class3:print2()
print("class3:print()")
end
function class3:print3()
print("class3:print()")
end
function super(k, list)
for i,v in ipairs(list) do
local ret = v[k]
if ret then
return ret
end
end
end
local class = {}
function class:new(...)
local obj = {}
-- local base = {class1, class2}
local base = {...};
--t为调用的对象,k为方法名
setmetatable(class, {__index= function(t,k) return super(k, base) end})
setmetatable(obj, {__index = class})
return obj
end
local c = class:new(class2,class1,class3);
-- c:print1();
c:print2();
-- c:print3();