在上一篇中讲了lua的继承,今天继续讲如何调用父类的接口
看以下代码
function base:ctor()
print("---base.ctor---")
self.m = 0 --成员变量
end
function base:getName( )
print("---base getName---")
print("self.m = ", self.m)
self:fun()
end
function base:fun()
print("-- base fun--")
end
local deriv = class("deriv", base)
function deriv:ctor()
deriv.super.ctor(self)
end
function deriv:fun()
print("-- deriv fun--")
end
function deriv:getName()
self.super:getName() --注意此行
print("---deriv---")
end
function deriv:getMyName()
print("---deriv getmyname---")
--self.m = self.m + 1
print("self.m = ", self.m)
end
local obj = deriv.new()
obj:getName()
以上的代码中getName里面会调用父类的getName,然而杯具的是:self.m为nil!
为什么呢?
注意:在deriv的ctor中,将self传入,实际上的所有成员变量都放在self(deriv)中了,基类中并没有self.m这个变量!因此会出现这个问题
正确的用法是
function deriv:getName()
self.super.getName(self) --注意此行
print("---deriv---")
end
要想知道.与:的区别,请参考这篇文章