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)

發佈了58 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章