Lua Lua之物件導向

2021-08-03 09:49:26 字數 1832 閱讀 3582

萬物皆值: 函式也是一種值

正式這個特點我們可以使用 table (陣列)構建乙個包含有屬性和方法的 table,這個table 就可以被我們當做物件來使用

tbl1 = 

tbl2 = {}

setmetatable(tbl2,)

print(tbl2.a) --輸出1

metastable可以用來改變table的行為,如__index表示查詢元素的行為

這裡執行 tbl2.a 的時候,由於tbl2沒有a這個key對應的value,會到metatable中去查詢,metatable中有__index這個key對應的值tbl1,所以最終會到tbl1中去 查詢a對應的value,最後得到1。

dog =         -- hello,dahuang

function

dog:new

(dog)

-- body

dog = dog or {}

setmetatable(dog,self)

self.__index = self

return dog

endfunction

dog:eat

() -- body

print(self.name, "eat something...")

endfunction

dog:getname

() -- body

return self.name

endfunction

dog:setname

(name)

-- body

self.name = name

endd = dog:new()

d:eat() -- 輸出: dahuang eat something...

print(d:getname()) -- 輸出: dahuang

d:setname("hachi") -- 八公

print("change name:",d:getname()) -- 輸出: hachi

setmetatable(dog,self)

self.__index = self

這裡是為新的物件 dog 設定了 metatable ,改變了__index的行為,即方法體是通過 metatable 來呼叫的

husky = dog:new()

-- derived class method new

function

husky:new

(dog)

dog = dog or dog:new(dog)

setmetatable(dog, self)

self.__index = self

return dog

endfunction

husky:eat

() -- body

print("husky eat meat...")

endh = husky:new()

h:eat() --輸出:husky eat meat...

h:setname("erha")

print(h:getname()) --輸出:erha

繼承乙個基類,來擴充套件派生類的方法,派生類中保留了基類的成員變數和方法,也可以重寫覆蓋基類中的成員或者方法

java之物件導向

類是用於描述同一型別的物件的乙個抽象。類中定義了這一類物件所具有的靜態和動態屬性 靜態屬性 成員變數 動態屬性 方法 1 類可以看成是一類物件的模板,物件可以看成該類的乙個具體例項 2 首先必須定義類才能有物件 說到類,就不得不說構造其構造方法了 在new乙個物件是,呼叫的就是類中的構造方法 列如p...

static之物件導向

一 靜態資料成員子 includeusing namespace std class point int point num 0 定義靜態資料成員 int main 對於類的非靜態資料成員,每個類物件都有自己的拷貝。而對於靜態資料成員被當作是類的成員。就像上述例子中,雖然定義了4個物件,但是靜態資料...

JS之物件導向

一,面對物件初始 為什麼要學習物件 1,js獲取頁面元素,操作頁面元素內容與樣式,資料面對物件思想讓運算元更加便捷與容易 優點 1,拓展性強,2,減少 冗餘3,降低成本 二,物件屬性解決迴圈繫結變數汙染問題 1,物件的 臨時 屬性可以幫助臨時資料的儲存,因為臨時資料的生命週期往往很短,需要提示臨時資...