## 繼承
由于類也是對象(準確地說是一個原型),它們也可以從其它類(原型)獲得(繼承)方法。這種行為就是繼承,可以很容易的在Lua中實現。現在我們有一個類(原型,其實在Lua中說類這個概念,還是很別扭的,畢竟用C++的腦袋去想,還是覺的有點奇怪的。)CA:
```lua
local CA = {value = 0}
function CA:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function CA:display()
print(self.value)
end
function CA:addValue(v)
self.value = self.value + v
end
```
現在需要從這個CA類派生出一個子類CLittleA,則需要創建一個空的類,從基類繼承所有的操作:
```lua
local CLittleA = CA:new()
```
現在,我創建了一個CA類的一個實例對象,在Lua中,現在CLittleA既是CA類的一個實例對象,也是一個原型,就是所謂的類,就相當于CLittleA類繼承自CA類。再如下面的代碼:
```lua
local s = CLittleA:new{value1 = 10}
```
CLittleA從CA繼承了new;不過,在執行CLittleA:new時,它的self參數表示為CLittleA,所以s的元表為CLittleA,CLittleA中字段\_\_index的值也是CLittleA。然后,我們就會看到,s繼承自CLittleA,而CLittleA又繼承自CA。當執行s:display時,Lua在s中找不到display字段,就會查找CLittleA;如果仍然找不到display字段,就查找CA,最終會在CA中找到display字段。可以這樣想一下,如果在CLittleA中存在了display字段,那么就不會去CA中再找了。所以,我們就可以在CLittleA中重定義display字段,從而實現特殊版本的display函數。
- 1 Lua介紹及環境
- 2 基本語法
- 3 數據類型
- 4 Lua 變量
- 5 循環
- 6 流程控制
- 7 函數
- 8 運算符
- 9 字符串
- 10 數組
- 11 迭代器
- 12 table
- 13 Lua 模塊與包
- 14 Lua 元表(Metatable)
- 14.1 元表案例
- 15 Lua 協同程序(coroutine)
- 16 Lua 文件IO
- 17 Lua 面向對象
- 17.1 類
- 17.2 繼承
- 17.3 封裝
- 18 Lua 與 Mysql
- 19 Lua 與 redis
- 20 Lua 與 JSON
- 21 Lua 與 http
- 22 Lua 與 Nginx
- 22.1 Nginx_Lua的安裝及環境
- 22.2 ngx_lua API(全表)
- 22.3 常用命令介紹
- 22 Lua 人工智能
- (1) Torch的安裝
- (2)Tensor
- Lua與C混合編程