<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Lua 面向對象 面向對象編程(Object Oriented Programming,OOP)是一種非常流行的計算機編程架構。 以下幾種編程語言都支持面向對象編程: * C++ * Java * Objective-C * Smalltalk * C# * Ruby ## 面向對象特征 * 1) 封裝:指能夠把一個實體的信息、功能、響應都裝入一個單獨的對象中的特性。 * 2) 繼承:繼承的方法允許在不改動原程序的基礎上對其進行擴充,這樣使得原功能得以保存,而新功能也得以擴展。這有利于減少重復編碼,提高軟件的開發效率。 * 3) 多態:同一操作作用于不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。 * 4)抽象:抽象(Abstraction)是簡化復雜的現實問題的途徑,它可以為具體問題找到最恰當的類定義,并且可以在最恰當的繼承級別解釋問題。 ## Lua 中面向對象 我們知道,對象由屬性和方法組成。LUA中最基本的結構是table,所以需要用table來描述對象的屬性。 lua中的function可以用來表示方法。那么LUA中的類可以通過table + function模擬出來。 至于繼承,可以通過metetable模擬出來(不推薦用,只模擬最基本的對象大部分時間夠用了)。 Lua中的表不僅在某種意義上是一種對象。像對象一樣,表也有狀態(成員變量);也有與對象的值獨立的本性,特別是擁有兩個不同值的對象(table)代表兩個不同的對象;一個對象在不同的時候也可以有不同的值,但他始終是一個對象;與對象類似,表的生命周期與其由什么創建、在哪創建沒有關系。對象有他們的成員函數,表也有: ``` Account = {balance = 0} function Account.withdraw (v) Account.balance = Account.balance - v end ``` 這個定義創建了一個新的函數,并且保存在Account對象的withdraw域內,下面我們可以這樣調用: ``` Account.withdraw(100.00) ``` ### 一個簡單實例 以下簡單的類包含了三個屬性: area, length 和 breadth,printArea方法用于打印計算結果: ``` -- Meta class Rectangle = {area = 0, length = 0, breadth = 0} -- 派生類的方法 new function Rectangle:new (o,length,breadth) o = o or {} setmetatable(o, self) self.__index = self self.length = length or 0 self.breadth = breadth or 0 self.area = length*breadth; return o end -- 派生類的方法 printArea function Rectangle:printArea () print("矩形面積為 ",self.area) end ``` ### 創建對象 創建對象是位類的實例分配內存的過程。每個類都有屬于自己的內存并共享公共數據。 ``` r = Rectangle:new(nil,10,20) ``` ### 訪問屬性 我們可以使用點號(.)來訪問類的屬性: ``` print(r.length) ``` ### 訪問成員函數 我們可以使用冒號(:)來訪問類的屬性: ``` r:printArea() ``` 內存在對象初始化時分配。 ### 完整實例 以下我們演示了 Lua 面向對象的完整實例: ``` -- Meta class Shape = {area = 0} -- 基礎類方法 new function Shape:new (o,side) o = o or {} setmetatable(o, self) self.__index = self side = side or 0 self.area = side*side; return o end -- 基礎類方法 printArea function Shape:printArea () print("面積為 ",self.area) end -- 創建對象 myshape = Shape:new(nil,10) myshape:printArea() ``` 執行以上程序,輸出結果為: ``` 面積為 100 ``` ## Lua 繼承 繼承是指一個對象直接使用另一對象的屬性和方法。可用于擴展基礎類的屬性和方法。 以下演示了一個簡單的繼承實例: ``` -- Meta class Shape = {area = 0} -- 基礎類方法 new function Shape:new (o,side) o = o or {} setmetatable(o, self) self.__index = self side = side or 0 self.area = side*side; return o end -- 基礎類方法 printArea function Shape:printArea () print("面積為 ",self.area) end ``` 接下來的實例,Square 對象繼承了 Shape 類: ``` Square = Shape:new() -- Derived class method new function Square:new (o,side) o = o or Shape:new(o,side) setmetatable(o, self) self.__index = self return o end ``` ### 完整實例 以下實例我們繼承了一個簡單的類,來擴展派生類的方法,派生類中保留了繼承類的成員變量和方法: ``` -- Meta class Shape = {area = 0} -- 基礎類方法 new function Shape:new (o,side) o = o or {} setmetatable(o, self) self.__index = self side = side or 0 self.area = side*side; return o end -- 基礎類方法 printArea function Shape:printArea () print("面積為 ",self.area) end -- 創建對象 myshape = Shape:new(nil,10) myshape:printArea() Square = Shape:new() -- 派生類方法 new function Square:new (o,side) o = o or Shape:new(o,side) setmetatable(o, self) self.__index = self return o end -- 派生類方法 printArea function Square:printArea () print("正方形面積為 ",self.area) end -- 創建對象 mysquare = Square:new(nil,10) mysquare:printArea() Rectangle = Shape:new() -- 派生類方法 new function Rectangle:new (o,length,breadth) o = o or Shape:new(o) setmetatable(o, self) self.__index = self self.area = length * breadth return o end -- 派生類方法 printArea function Rectangle:printArea () print("矩形面積為 ",self.area) end -- 創建對象 myrectangle = Rectangle:new(nil,10,20) myrectangle:printArea() ``` 執行以上代碼,輸出結果為: ``` 面積為 100 正方形面積為 100 矩形面積為 200 ``` ## 函數重寫 Lua 中我們可以重寫基礎類的函數,在派生類中定義自己的實現方式: ``` -- 派生類方法 printArea function Square:printArea () print("正方形面積 ",self.area) end ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看