lua中基于原型的继承
下面将转一个例子,原文请参见:点击打开文章链接,该例子显示了,在lua编程当中:
- 如何创建一个基类;
- 如何利用基类创建一个实例;
- 如何用基类派生一个子类;
- 如何用子类创建一个实例;
源代码
print("-------------------")
--基于原型的继承
--理解为基类
Robort = {id = 001, name = "Li Lei"}
function Robort:getId()
return self.id
end
function Robort:setId( id )
self.id = id
end
function Robort:getName()
return self.name
end
function Robort:setName( name )
self.name = name
end
--用于派生子类的成员函数
function Robort:New( extension )
local subRobort = setmetatable( extension or {}, self )
self.__index = self
return subRobort
end
--基类方法创建实例
robort = Robort:New()
print("robort:id-", robort:getId())
print("robort:name-", robort:getName())
print("-------------------")
--FootRobort继承自Robort类,并拥有自己的属性和方法
FootRobort = Robort:New({ position = "here" })
function FootRobort:getPosition()
return self.position
end
function FootRobort:setPosition( position )
self.position = position
end
--使用子类创建子类的实例
footRobort = FootRobort:New()
print("footRobort:id-", footRobort:getId())
print("footRobort:name-", footRobort:getName())
print("footRobort:position-", footRobort:getPosition())
print("---------测试:修改子类实例的成员数据,证明父类的实例的成员数据是不会受到影响的----------")
footRobort:setName("Han Meimei")
print("footRobort:Name-"..footRobort:getName())
print("robort:Name-"..robort:getName())
print("-------------------")
【结果】
-------------------
robort:id- 1
robort:name- Li Lei
-------------------
footRobort:id- 1
footRobort:name- Li Lei
footRobort:position- here
---------测试:修改子类实例的成员数据,证明父类的实例的成员数据是不会受到影响的----------
footRobort:Name-Han Meimei
robort:Name-Li Lei
-------------------
robort:id- 1
robort:name- Li Lei
-------------------
footRobort:id- 1
footRobort:name- Li Lei
footRobort:position- here
---------测试:修改子类实例的成员数据,证明父类的实例的成员数据是不会受到影响的----------
footRobort:Name-Han Meimei
robort:Name-Li Lei
-------------------