local _class={}
function class(super)
local class_type={}
class_type.ctor=false
class_type.super=super
class_type.new=function(...)
local obj={}
do-- 遞迴呼叫建構函式,實現構造基類的資料
local create
create = function(c,...)
if c.super then
create(c.super,...)
endif c.ctor then
c.ctor(obj,...)
endend
create(class_type,...)
end-- 指定虛函式表
setmetatable(obj,)
return obj
endlocal vtbl={}
_class[class_type]=vtbl
-- 將類的函式,存入虛函式表
setmetatable(class_type,)
-- 如果有基類,在自己的虛函式表中查不到時,查詢基類的虛函式表
if super then
setmetatable(vtbl,)
endreturn class_type
endbase_type=class() -- 定義乙個基類 base_type
function base_type:ctor(x) -- 定義 base_type 的建構函式
print("base_type ctor")
self.x=x
end
function base_type:print_x() -- 定義乙個成員函式 base_type:print_x
print(self.x)
end
function base_type:hello() -- 定義另乙個成員函式 base_type:hello
print("hello base_type")
endtest=class(base_type) -- 定義乙個類 test 繼承於 base_type
function test:ctor() -- 定義 test 的建構函式
print("test ctor")
end
function test:hello() -- 過載 base_type:hello 為 test:hello
print("hello test")
enda=test.new(1) -- 輸出兩行,base_type ctor 和 test ctor 。這個物件被正確的構造了。
a:print_x() -- 輸出 1 ,這個是基類 base_type 中的成員函式。
a:hello() -- 輸出 hello test ,這個函式被過載了
lua 類的繼承實現
1.lua 類中其實沒有類的概念,乙個類只是用乙個表 table 來管理的,如果想要實現子類繼承父類,簡單來說就是把兩個表組到一起。2.lua中提供了原表 metatable 可以通過原表來改變原來lua類的一些行為,比如把兩個表相加 a b father classfather.index cla...
lua 實現類 和 繼承
lua 實現類 繼承 需要以 table 表 的形式實現 table lua的資料結構之一 setmetatable a,b 設定a的元表為b 設定完元表之後 還要將 b的 index 指向自身 這樣的話 在a中查詢元素找不到的話,就會去b中查詢 如果b的 index沒有賦值,那麼及時b中存在也會返...
Lua類繼承的優雅實現方式
網上有一些lua類繼承的示例,但是無法實現方法覆蓋,同時能呼叫已經被覆蓋的父類的方法。這兒是博主自己琢磨的一種方式,測試用可。local m function m new name return setmetatable endfunction m show print self.name show...