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...