lua继承
发布时间:2020-12-14 22:17:46 所属栏目:大数据 来源:网络整理
导读:Account = {balance = 0}function Account:new (o)o = o or {}setmetatable(o,self)self.__index = selfprint("This is Base")return oendfunction Account:deposit (v)self.balance = self.balance + vendfunction Account:withdraw (v)if v self.balance t
Account = {balance = 0} function Account:new (o) o = o or {} setmetatable(o,self) self.__index = self print("This is Base") return o end function Account:deposit (v) self.balance = self.balance + v 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 print("error insufficient funds") return -1 end self.balance = self.balance - v end function SpecialAccount:getLimit () return self.limit or 0 end s = SpecialAccount:new{limit=1000.00} --在Lua中面向对象有趣的一个方面是你不需要创建一个新类去指定一个新的行为. --如果仅仅一个对象需要特殊的行为,你可以直接在对象中实现 function s:getLimit () return self.balance * 0.10 end s:deposit(100.00) --调用基类的存钱函数 print(s.balance) s:withdraw(200.00) --调用子类的取钱函数,取钱失败 print(s.balance) s:getLimit() --调用了s:getLimit () print(s.limit) local _class={} function class(super) local class_type={} class_type.ctor=false class_type.super=super class_type.new=function(...) local obj={} do local create create = function(c,...) if c.super then create(c.super,...) end if c.ctor then c.ctor(obj,...) end end create(class_type,...) end setmetatable(obj,{ __index=_class[class_type] }) return obj end local vtbl={} _class[class_type]=vtbl setmetatable(class_type,{__newindex= function(t,k,v) vtbl[k]=v end }) if super then setmetatable(vtbl,{__index= function(t,k) local ret=_class[super][k] vtbl[k]=ret return ret end }) end return class_type end base_type=class() -- 定义一个基类 base_type function base_type:ctor(x) -- 定义 base_type 的构造函数 print("base_type ctor") self.x=x end function base_type:print_x() -- 定义一个成员函数 base_type:print_x print(self.x) end function base_type:hello() -- 定义另一个成员函数 base_type:hello print("hello base_type") end test=class(base_type) -- 定义一个类 test 继承于 base_type function test:ctor() -- 定义 test 的构造函数 print("test ctor") end function test:hello() -- 重载 base_type:hello 为 test:hello print("hello test") end a=test.new(1) -- 输出两行,base_type ctor 和 test ctor 。这个对象被正确的构造了。 a:print_x() -- 输出 1 ,这个是基类 base_type 中的成员函数。 a:hello() -- 输出 hello test ,这个函数被重载了。 http://blog.codingnow.com/cloud/LuaOO http://book.luaer.cn/_98.htm http://www.voidcn.com/article/p-hfrvuhhk-bdr.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |