lua 用表实现面向对象

--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()                    --输出子类的内容

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值