--從 處開始function sertchfield( parents ,k)
for i,v in pairs(parents) do
local result =v[k]--遍歷parents= 裡的每個元素,查詢乙個鍵為k的成員(例如 fly ,onfoot) --這裡找到了 fly onfoot 就返回 找不到 就 返回 nil 了
if result then
return result
endend
endfunction extends(...)
local cls={}--繼承了 parents= 裡的類的新類
local parents=
--在新類裡面找不到的成員 將按照sertchfield 的規則去找
setmetatable(cls,)
--這裡設定cls 的__index ,當o 例項找不到成員 會進入__index 設定的表查詢 當cls 也查不到就會按照sertchfield查詢
cls.__index=cls
function cls:new(o)--為新類構造 構建函式
o=o or {} --設定元表 ,在o 例項找不到的 成員 將會到cls 新類裡面去找 但是 cls 的__index還沒有設定, --因此在上面別忘了設定cls的__index 在處
setmetatable(o,cls)
return o
endreturn cls
end--會飛的行為
flyaction={}
function flyaction:fly()print("flying ")
end--會走的行為
onfootaction ={}
function onfootaction:onfoot()print("on foot ")
end--構建 乙個新類
twoaction = extends( flyaction ,onfootaction)
--例項化乙個新類 進入
anim=twoaction:new()
--print(anim.kk)
anim:fly()
anim:onfoot()
多重繼承 C 中的多重繼承
多重繼承是c 的一項功能,其中乙個類可以從多個類繼承。繼承類的建構函式以它們繼承的相同順序被呼叫。例如,在以下程式中,在a的建構函式之前呼叫b的建構函式。include using namespace std class a class b class c public b,public a not...
Lua的物件導向 多重繼承 私密性
本文 於 在lua中的多重繼承和私密性可能用得比較少,也可能只是我個人用得比較少。本來想偷懶不寫這文章的,因為我今天剛買了個漂移板,連起步都還沒學會啊,想多學一會。咳咳,本著堅持不懈 負責到底的態度,我還是決定隨便寫幾句 小若 隨便寫幾句是幾噸意思啊?我發現這些高 shen 智 jing 商 bin...
多重繼承(菱形繼承)
多重繼承 經典的是菱形繼承,如圖。菱形繼承將會產生的問題 把基類a中的成員變數通過b和c兩次繼承至d。d的繼承結構 可以看到,ma被繼承兩次至d 那麼將如何解決這個問題呢?採用虛繼承的方法,將基類a中的ma直接繼承至d。如下 class a int ma class b virtual public...