lua的类与继承

一些面向对象的语言中提供了类的概念,作为创建对象的模板。在这些语言里,对象是类的实例。Lua 不存在类的概念,每个对象定义他自己的行为并拥有自己的形状(shape) 。在这些语言中, 对象没有类。 相反, 每个对象都有一个 prototype(原型) ,当调用不属于对象的某些操作时,会最先会到 prototype 中查找这些操作。在这类语言中实现类(class)的机制,我们创建一个对象,作为其它对象的原型即可(原型对象为类,其它对象为类的 instance) 。类与 prototype 的工作机制相同,都是定义了特定对象的行为。

extends.lua

Account = {    balance = 0}                        --初始化对象

function Account:deposit(v)                        --定义方法
    self.balance = self.balance + v
end

function Account:new(o)                            --原型继承方法
    o = o or {}
    setmetatable(o, self)
    self.__index = self
    return o
end

function Account:withdraw (v)                    --定义方法
    if v > self.balance then error"insufficient funds" end
    self.balance = self.balance - v
end

---继承
SpecialAccount = Account:new()                    --继承父类

function SpecialAccount:withdraw (v)            --覆写方法
    if v - self.balance >= self:getLimit() then
    error"insufficient funds"
    end
    self.balance = self.balance - v
end
function SpecialAccount:getLimit ()                --新增方法
    return self.limit or 0
end

--下面测试脚本
s = SpecialAccount:new{limit=1000.00}            
s:deposit(100.00)
s:withdraw(200.00)
print(s.balance)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e421083458

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值