实现类和继承、多重继承和多态
来源:互联网 发布:网络回路 检查方法 编辑:程序博客网 时间:2024/05/17 22:25
lua的类也是一个table,它有自己的metatable,主要有__index元操作,有成员函数,有构造函数,设计这样一个函数,它构造出这样一个table。
function Class(t)
local class = {};
class.__member_data = t or {};
class.__index = class;
function class:InheritMemberData(...)
local base = {self, ...};
local member_data = {};
for _, t in pairs(base) do
for k, v in pairs(t.__member_data) do
if member_data[k] then
print("redefined member data '" .. k .. "'");
else
member_data[k] = v;
end
end
end
self.__member_data = member_data;
end;
function class:InheritInterface(...)
local base = {self, ...};
if select("#", ...) == 1 then
setmetatable(self, ...);
else
self.__index = function(_, key)
for k, v in pairs(base) do
local value = v[key];
if value then
return value;
end
end
end;
end
end;
function class:Inherit(...)
self:InheritMemberData(...);
self:InheritInterface(...);
return self;
end;
function class:New(o)
local obj = {};
for k, v in pairs(self.__member_data) do
obj[k] = v;
end
for k, v in pairs(o or {}) do
if obj[k] then
obj[k] = v;
end
end
setmetatable(obj, self);
return obj;
end;
return class;
end
使用的时候就像下面这样:
B1 = Class {
x = 0; -- 成员定义和默认值
};
function B1:GetX() -- 成员函数定义
return self.x;
end
B2 = Class {
y = 0;
};
function B2:GetY()
return self.y;
end
D = Class {
z = 0;
}:Inherit(B1, B2); -- 继承自B1和B2,继承所有的成员数据和成员函数
function D:GetZ()
return self.z;
end
local d = D:New{x = 1, y = 2, z = 3};
print(d:GetX(), d:GetY(), d:GetZ());
这种继承,是有多态的性质的,如果在子类中找不到某个名字,才会去基类中找,如果子类中有override的接口,则会调用子类的。最后还差一个权限控制,也就是隐藏信息,下回设计。
- 实现类和继承、多重继承和多态
- 多继承和多重继承
- C++ 讲解:多继承和多重继承
- C++多重继承和多继承格式
- python进阶15:继承、多态和多重继承
- 多重继承和虚拟继承
- 多重继承和虚继承
- 多重继承和虚继承
- 多重继承、钻石继承和虚继承
- 多重继承,钻石继承和虚继承
- 多重继承和虚基类
- 多重继承和接口
- 多重继承和虚基类
- 多重继承和虚基类
- 多重继承和 templates
- 使用JS中的Call方法实现继承和多重继承
- Java 利接口来实现多态的情况, 和利用接口实现多重继承!
- 类对象内存布局,虚函数,虚拟继承和多重继承的实现
- 选择排序(ASC)
- 无奈的生活
- 中国地图api调用,谷歌地图api调用说明!
- nginx 源码序
- frameset 将截断键盘和鼠标事件的问题解决办法
- 实现类和继承、多重继承和多态
- s:optiontransferselect 左右框
- tinkpad音量进度条不显示
- 史上最全ASP.NET面试题目集锦
- CreateFileMapping ,MapViewOfFile和OpenFileMapping的用法
- Google巧妙发布Sky星空地图
- Windows消息机制要点
- Javascript 面向对象的Class, 怎么写最好.
- 学习算法第二课