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)

猜你喜欢

转载自blog.csdn.net/yuan_bowen/article/details/80463710
今日推荐