Lua语言核心在Table,通过将一个table作为另一个table的metatable元表,实现继承;
通过一个例子理解Lua的面向对象和继承;
---------------Person Base Class
Person={}
function Person:new(o,age,name) --Person的构造函数
o=o or {}
setmetatable(o,self)
self.__index=self
self.age=age or 0
self.name=name or ""
return o
end
function Person:SayHello() --Person的成员函数
print("Hello,I am "..self.name,"I am"..self.age.."Years old.")
end
p=Person:new(nil,18,"Tom") --创建一个Person对象p
p:SayHello()
--------------Woman类 继承自Person
Woman=Person:new() --这句Woman是Person的构造函数的返回值,Person是Woman的原型
function Woman:new(o,age,name) --Woman的构造函数
o=o or Person:new(o,age,name)
setmetatable(o,self)
self.__index=self
self.gender="Woman" --只改变一个gender字段
return o
end
function Woman:SayHello() --重写成员函数
Person:SayHello()
print("I am a "..self.gender)
end
w=Woman:new(nil,20,"Sany")
w:SayHello()
---------------Man 继承自Person --Man与Woman一样,继承自Person
Man=Person:new()
function Man:new(o,age,name)
o=o or Person:new(o,age,name)
setmetatable(o,self)
self.__index=self
self.gender="Man"
return o
end
function Man:SayHello()
Person:SayHello()
print("I am a "..self.gender)
end
m=Man:new(nil,23,"yua")
m:SayHello()