开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   18803836360

lua中的模仿面向对象 以及继承

个人分类: lua | 2017-11-14 11:29
--lua 没有真真正正 面向对象  只是仿照实现的
--借助table

--[[Person=                        --作为类
{
    name="jnsb",            --字段
    age=18                    --字段
}

function Person.SetValue(self,_name,_age)   --构造函数,两个参数
    -- body
    self.name=_name                            --赋值
    self.age=_age
end
 function Person.GetValue(self )            --获取对象自身的值 self相当于this
     -- body
     return self.name,self.age               --返回当前对象的值
 end

 local p1=Person                 --根据person类创建对象
 p1.SetValue(p1,"lang",38)    --对象调用方法
 local a,b=p1.GetValue(p1)      --接受输出返回值
 print(a)
 print(b)
 --]]

--[[
print("-----------------38分界线-------------------")
print("-----------------去掉self之后------------------------")
 Person=                        --作为类
{
    name="jnsb",            --字段
    age=18                    --字段
}

function Person.SetValue(_name,_age)   --构造函数,两个参数
    -- body
    name=_name                            --赋值
    age=_age
end
 function Person.GetValue( )            --获取对象自身的值 self相当于this
     -- body
     return name,age               --返回当前对象的值
 end

 local p1=Person                 --根据person类创建对象
 p1.SetValue("lang",38)    --对象调用方法
 local a,b=p1.GetValue()      --接受输出返回值
 print(a)
 print(b)
 local p2=Person
 p2.SetValue("jnsbDD",18)
 local c,d=p2.GetValue()
 print(c)
 print(d)

 Animatial=
 {
 name="null",
 age="0"
}
print("-----------------38分界线-------------------")
print("-----------------去掉self之后------------------------")
function Animatial:SetValue(name,age)            
    -- body
    self.name=name
    self.age=age
end
function Animatial:GetValue( )
    -- body
    return self.name,self.age
end
local a = Animatial           --根据person类创建对象
a:SetValue("jnsbDDWw",18)        --对象调用方法
local J,N= a:GetValue()
print(J)
print(N)
-- lua面向对象中   .和:的区别
-- . 手动隐藏self函数
-- : 自动隐藏self函数
]]

--继承    __index
Hero={attack=0}                --父类
function Hero:new(o)      --o->表
    -- body
    o=o or {}                --前边为真取前边
    print(type(o))
    setmetatable(o,self)    --设置元表为当前表
    self.__index=self       --设置当前表的__index表为self

    return o                 --返回一个表,这个表继承自父类
end

function Hero:Skill( _attack )
    -- body
    self.attack=self.attack+_attack
end

--继承的子类
oneHero=Hero:new({})                    --直接放空表防止产生多余的表
--print(Hero)
--print(getmetatable(oneHero))          --获取oneHero表的元表
oneHero:Skill(10)
print(oneHero.attack)        

function oneHero:Use( ... )              --使用函数扩展 子类 字段
    -- body
    self.Hp=120
end
oneHero:Use()                            --调用函数
print(oneHero.Hp)                        -- 输出
0 0

作者的其他最新博客

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

返回顶部