1.封装
封装的原理是为table添加metatable
,并设置__index
元方法。例如:
People = {age =18};
function People:new()
local people = {};
setmetatable(people,self);
self.__index = self;
return people;
end
function People:growUp()
self.age = self.age + 1;
print(self.age);
end
// 测试
p1 = People:new();
p1:growUp();
p2 = People:new();
p2:growUp();
以上例子的两个对象拥有完全独立age
,而且任何有关People
的方法都是对外不可见的,这样就实现了对面向对象中类的封装。
2.继承
Man = People:new();
function Man:growUp()
self.age = self.age + 1;
print("man's growUp: "..self.age);
end
// 测试
man = Man:new();
man:growUp(); // 输出为:man's growUp:19
以上例子重写了growUp()
方法,实现了继承的基本用法
3.多态
Lua不支持函数多态,而是支持指针多态。
person = People:new();
person:growUp(); // 输出为:19
person = Man:new();
person:growUp(); // 输出为:man's growUp 19