Lua 面向對象(class)

(一)class() 定義純 Lua 類

基類:

--定義一個名爲 Shape 的基礎類

local Shape = class("Shape") --這是一個純Lua類

--ctor()是類的構造函數,在調用Shape.new()創建Shape對象實例時自動調用

function Shape:ctor( shapeName )

    self.shapeName = shapeName
    printf("Shape:ctor(%s)", self.shapeName)

end

function Shape:initView()
    
    printf("draw %s", self.shapeName)

end


return Shape

 派生類:

local Circle = class("Circle",require("Shape"))

function Circle:ctor( ... )

    -- 如果繼承類覆蓋了 ctor() 構造函數,那麼必須手動調用父類構造函數
    -- 類名.super 可以訪問指定類的父類

    --在用super獲取到基類對象的時候,函數傳遞要將自己傳入self
    --因爲lua中所有的成員,函數都已經保存在派生類中了,基類調用不到

    self.super.ctor(self)

    --調用派生類中的函數
    self:initView()

    --調用基類中的函數
    self.super:initView()

end

--覆蓋父類的同名方法
function Circle:initView()
    
end


return Circle

(二)class() 從 C++ 對象繼承類

--定義一個名爲 BaseView 的基礎類

--從 cc.Layer 對象派生 BaseView 類,該類具有所有 cc.Layer 的屬性和方法

local BaseView = class("BaseView",function()
    return cc.Layer:create()
end)

function BaseView:ctor( ... )
end

function BaseView:initView()
end

return BaseView

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章