当前位置: 代码迷 >> 综合 >> cocos2d-x lua 面向对象 === 调用基类在派生类中已经被重载了的函数
  详细解决方案

cocos2d-x lua 面向对象 === 调用基类在派生类中已经被重载了的函数

热度:5   发布时间:2023-11-18 01:14:53.0

基类:

local Base = class("Base", function ()return cc.Layer:create()
end)function Base:ctor( ... )
endfunction Base:test(self, ... )endreturn Base

派生类

local BaseClass = require("Base")
local Derived = class("Derived", BaseClass)function Derived:test( ... )-- 这里已经重载了
endfunction Derived:main()self:test()   --调用派生类中的test函数self.super:test(self)  --调用基类中的test函数
endreturn Derived

    重点就是在用super获取到基类对象的时候函数传递要将自己传入,因为lua中所有的成员,函数都已经保存在派生类中了,基类调用不到。

 

    当然如果没有在派生中重载基类函数的话,直接self:xxxxx()就可以调用了,很方便。

    我根据我的理解又做了一点小小的改动,使得使用方便很多

local Base = class("Base", function ()return cc.Layer:create()
end)function Base:ctor( app )--将派生类指针赋值给基类自己if not self and not app thenself = append
endfunction Base:test(self, ... )endreturn Baselocal BaseClass = require("Base")
local Derived = class("Derived", BaseClass)function Derived:test( ... )-- 这里已经重载了
endfunction Derived:main()self.super:ctor(self)  --这里直接传递self指针进去,以后调用只需要self.super:xxx(..)就可以了self:test()   --调用派生类中的test函数self.super:test()  --调用基类中的test函数
endreturn Derived

 这样以后调用就方便啦