--OOP
Person={}
--定义“字段”
Person["Name"]="liuguozhu"
Person.Name="xuxu"
Person.Gender="男"
--定义“方法”
function Person:PersonInfo()
print(string.format("人员信息 姓名:%s, 性别: %s",self.Name,self.Gender))
end
--调用方法
print("名称: ",Person.Name)
Person:PersonInfo()
print("------")
--[[-- 使用元方法”__index“ 实现继承的机制]]
Person={}
--定义“字段”
Person.Name="xuxu"
Person.Gender="男"
Person.Address="中国"
--定义“方法”
function Person:PersonInfo()
print(string.format("人员信息 姓名:%s, 性别: %s",self.Name,self.Gender))
end
--定义”子类“, 实现基础OOP继承的机制
local YeWenJie={}
--设置”子类“的属性与方法
YeWenJie.Name="叶文洁"
YeWenJie.Gender="女"
function YeWenJie:Speak()
print(self.Name.." 说话方法")
end
--设置元表(元方法)
setmetatable(YeWenJie,{__index=Person})
--测试
print(YeWenJie.Address) --output: 中国 (继承关系)
YeWenJie:PersonInfo() --output: 人员信息 姓名:叶文洁, 性别: 女 (继承关系)
print(YeWenJie.Name) --output: "叶文洁"
YeWenJie:Speak() --output: 叶文洁 说话方法
print("------")
--[[-- 进一步优化lua的继承机制]]
Person={}
--定义“字段”
Person.Name="刘国柱"
Person.Gender="男"
Person.Address="中国"
--定义“方法”
function Person:PersonInfo()
print(string.format("人员信息 姓名:%s, 性别: %s",self.Name,self.Gender))
end
--定义一个实现继承机制的特殊方法
function Person:New(name,gender)
local subClass={} --定义返回的子类(表)
self.__index=self
setmetatable(subClass,self)
subClass.Name=name
subClass.Gender=gender
return subClass
end
--定义子类
local ChenXin=Person:New("程心","女") --得到一个具备数据的”子类“
--测试
print(ChenXin.Name)
ChenXin:PersonInfo() --调用父类方法
--测试 ”方法覆盖“
function ChenXin:PersonInfo()
print("ChenXin 个人信息:")
print("姓名:",self.Name)
print("姓名:",self.Gender)
end
--调用测试
ChenXin:PersonInfo() --输出子类的内容