在lua中模擬類的繼承行為,可以通過setmetatable方法來實現。首先,我們就先實現乙個基類vehicle,然後再定義該基類的乙個子類bicycle,基類的定義與之前介紹的類的定義方法是一致的,如果你對此還不是很熟悉,可以先回顧一下《lua物件導向程式設計(一)類》。
基類vehicle的定義:
--類的屬性
local vehicle =
--有了這一句才能算是乙個類,因為這一句實現了例項和類之間的關聯性
vehicle.__index = vehicle
--建構函式
function vehicle:new(wheels, speed, color)
local obj = {}
setmetatable(obj, self) --這裡和上面的__index是遙相呼應的
obj.wheels = wheels
obj.speed = speed
obj.color = color
return obj
end
--基類的方法
function vehicle:getspeed()
print(self.speed)
end
function vehicle:setspeed(x)
self.speed = x
end
function vehicle:speedpluss()
self.speed = self.speed + 1
end
下面看看bicycle的定義:
local bicycle =
setmetatable(bicycle, vehicle)--這裡就實現了bicycle對vehicle的繼承
bicycle.__index = bicycle --這樣就實現了乙個類,以便bicycle的每個例項都到bicycle進行查詢
function bicycle:new(engine)
local obj = {}
obj = vehicle:new(2, 10, "r")
obj.engine = engine --除了繼承基類成員外,新增自己成員
setmetatable(obj, self) --使得bicycle的每個例項都與bicycle掛鉤
return obj
end
--對父類方法的過載
function bicycle:setspeed(s)
self.speed = s
end
function bicycle:getspeed()
print(self.speed)
end
--bicycle自己的方法
function bicycle:printall()
print(self.speed .. "," .. self.wheels ..",".. self.color .. "," .. self.engine)
end
ok,現在我們就可以建立bicycle的物件了:
--建立bicycle的兩個物件
ob1 = bicycle:new(2)
ob2 = bicycle:new(3)
ob1:printall()
ob2:printall()
ob1:setspeed(15)
ob2:speedpluss()
ob1:printall()
ob2:printall()
輸出的結果:
10,2,r,2
10,2,r,3
15,2,r,2
11,2,r,3
可以看到,子類的例項ob2可以執行父類的方法,此外,子類也能過載父類的方法,各個例項之間是沒有任何影響的。bicycle繼承了父類的屬性和方法,同時也宣告了屬於自己的屬性和方法。這就是lua中的繼承,是不是挺簡單的,麻麻再也不用擔心我的學習了,呵呵!
(全文完)
Lua程式設計(四)物件導向類繼承
1.類繼承 sharp 父類 function sharp new local new sharp self.index self self sharp setmetatable new sharp,self return new sharp endfunction sharp sharp func...
lua 物件導向程式設計
物件的實現 在lua中table就是一種物件 1.有自己的狀態 2.有自己的唯一標識self 3.有自己的生命週期 使用table可以自己實現物件導向的幾乎所有特性 把函式定義在table中,並使用t.func的形式訪問,如同方法呼叫 account function account.withdra...
Javascript物件導向程式設計(二) 繼承
上一次的文章,主要介紹了如何 封裝 資料和方法,從原型物件生成例項。今天要介紹的是,多個原型物件之間如何 繼承 比如,現在有乙個 動物 物件,function animal 那麼,下一步必然是為新的prototype物件加上constructor屬性,並將這個屬性指回原來的建構函式。o.protot...