现在的位置: 首页 > 综合 > 正文

lua继承

2017年09月16日 ⁄ 综合 ⁄ 共 1701字 ⁄ 字号 评论关闭

Son继承Fathter,Monther,Father和Monther继承People

单继承实现

People.lua

local People = {}
function People:new()
  -- body
  local Obj = {}  --创建新的表作为实例的对象
  setmetatable(Obj,{__index=People})  --设置People为对象原表的__index
  return Obj    --返回对象
end

function People:setHeight()
  -- body
end
function People:getHeight()
  -- body
  print("People getHeight")
end
return People

Father.lua

local People=require("People.lua")
local Father = {}
function Father:new()
  -- body
  setmetatable(Father,{__index=People})
  local Obj = {}
  setmetatable(Obj,{__index=Father})
  return Obj
end

function Father:getHeight()
  -- body
  print("Father:getHeight")
end

return Father

Monther.lua

local People=require("People.lua")
local Monther = {}
function Monther:new()
	-- body
        setmetatable(Monther,{__index=People})
	local Obj = {}
	setmetatable(Obj,{__index=Monther})
	return Obj
end

function Monther:getMoney()
	-- body
	print("Monther:getMoney")
end

return Monther

Son.lua

--查找函数
local function search(k,plist)
  for i=1,#plist do
    local v = plist[i][k]   --查找函数
    if v then return v end
  end
end 


local Son = {}
Father = require("Father")
Monther = require("Monther")
local function createClass()
  local parent = {Father,Monther}  --基类
  setmetatable(Son,{__index=function (t,k)
    return search(k,parent)
  end})
end


function Son:new()
  local Obj = {}
  createClass()
  setmetatable(Obj,{__index=Son})
  return Obj
end

function Son:getState()
  -- body
  print("Son:getState")
end

return Son

调用

ocal Father = require("Father.lua")
  f1=Father:new()
  f1:getHeight()

  local Monther = require("MOnther.lua")
  m1=Monther:new()
  -- m1:getHeight()

  local Son = require("Son.lua")
  s1=Son:new()
  s1:getState()
  s1:getHeight()
  s1:getMoney()

实现单例

OtherAnimal = {}
OtherAnimal_mt={__index=OtherAnimal}
function OtherAnimal:new()
	-- body
	local Obj = {}
	setmetatable(Obj,OtherAnimal_mt)
	return Obj
end

function OtherAnimal:func1()
	-- body
	print("func1")
end

调用

require("OtherAnimal.lua")
  O2=OtherAnimal:new()
  O2:func1()

抱歉!评论已关闭.