Lua的繼承,封裝,通用類

2021-08-15 02:03:01 字數 1991 閱讀 7105

local function class(classname, super)

local supertype = type(super)

local cls

if supertype ~= "function" and supertype ~= "table" then

supertype = nil

super = nil

endif supertype == "function" or(super and super.__ctype == 1) then

-- inherited from native c++ object

cls =

if supertype == "table" then

-- copy fields from super

for k, v in pairs(super) do cls[k] = v end

cls.__create = super.__create

cls.super = super

else

cls.__create = super

cls.ctor = function() end

endcls.__cname = classname

cls.__ctype = 1

function cls.new(...)

local instance = cls.__create(...)

-- copy fields from class to native object

for k, v in pairs(cls) do instance[k] = v end

instance.class = cls

instance:ctor(...)

return instance

endelse

-- inherited from lua object

if super then

cls =

setmetatable(cls, )

cls.super = super

else

cls =

endcls.__cname = classname

cls.__ctype = 2

-- lua

cls.__index = cls

function cls.new(...)

local instance = setmetatable( , cls)

instance.class = cls

instance:ctor(...)

return instance

endend

return cls

end

新增基類

local player = class("player")
此基類派生類的方法

function player:getobj() --放乙個引數

--do anything you want

end

繼承基礎類

player_other = class("playerother", player)

function player_other:getobj()

self.super:getobj()

--在這裡寫你想寫的喲

end

也可以重寫基礎類方法

function player_other:getobj()

---重寫父類的方法 在派生類中定義自己的實現方式

end

建立物件 並使用基礎類中的方法

local myself = player_other.new()myself :getobj()

lua實現類的繼承

local class function class super local class type class type.ctor false class type.super super class type.new function local obj do 遞迴呼叫建構函式,實現構造基類的資料...

lua 類的繼承實現

1.lua 類中其實沒有類的概念,乙個類只是用乙個表 table 來管理的,如果想要實現子類繼承父類,簡單來說就是把兩個表組到一起。2.lua中提供了原表 metatable 可以通過原表來改變原來lua類的一些行為,比如把兩個表相加 a b father classfather.index cla...

Lua的物件導向,封裝,繼承,多型

我們總所周知物件是由屬性和方法組成的,要用lua要描述乙個物件,也必然要有這兩個特性,屬性和方法。lua的基本結構是table,所以lua的類,其實都是table,因為它可以儲存普通的變數又可以儲存方法,我們利用table就可以描述乙個物件的屬性和方法。其實lua要模擬乙個物件,關鍵就在於 inde...