Lua 继承 原理

-- 工具函数
--克隆一个传进来的表到自己创建的一个新的表
function clone(origin)
    local dest = {}
    for key, value in pairs(origin) do
        dest[key] = value
    end
    return dest;
end

--传进来两个表  A和B  将B表中的元素克隆到A表中
function copy(dest, tab)
    for key, val in pairs(tab) do
        dest[key] = val
    end
end

--定义父类
People = {}


People.sayHi = function(self) --父类中的元素 sayHI     (self =People.sayHi方法)
    print("父SayHI "..self._name)
end

People.eat = function()--父类中的元素 eat
    print("父eat")
end

People.aaa=function()
    print ("aaaaa")
end


People.new = function(name)  --父类的构造函数   (self =People.new方法)
    self = clone(People)
    self._name = name --用构造参数初始化_name字段
    return self
end





-- 定义子类
Chinese = {}

Chinese.new = function(name, hukou)
    self = People.new(name);    --new 父类对象实现继承
    self._hukou = hukou --用构造参数初始化_hukou字段
   copy(self, Chinese)  -- 子类上面的 特有的属性也附着到self上面

    return self
end

Chinese.eat = function() -- 覆盖父类方法
    print("子类 eat")
end

Chinese.aaaaa()

Chinese.buyHouse = function()
    print("子类独有")
end
-------------------------------------------------------------
lisi = Chinese.new("1", "hebei")
lisi.new ()
--print(lisi._name.." is from "..lisi._hukou) -- 父类的成员和自己的成员
--
--lisi:sayHi() -- 继承父类方法
--lisi:eat() -- 覆盖父类方法
--lisi:buyHouse() -- 子类独有的方法
print(lisi ._name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值