Lua 面向对象 继承 二
继上一篇 Lua面向对象 继承
上一篇内容较多,结构上看着比较复杂,这一篇精简结构
构建如下图的类结构
创建类 Biology
创建类 Animatio 继承 Biology
创建类 Bird 继承 Animation
创建类 Dog 继承 Animation
Biology = {
birth = "abc", weight = 1, speed = 1 }
-- 创建对象实例
function Biology:new(o)
o = o or {
}
setmetatable(o, self)
self.__index = self
return o
end
function Biology:Run()
print("Biology:Run:"..self.speed)
end
Animation = Biology:new(nil)
Animation.leg = 2
-- 派生类方法
function Animation:new(o)
o = o or Biology:new(o)
setmetatable(o, self)
self.__index = self
return o
end
local Bird = Animation:new(nil)
-- 派生类方法
function Bird:new(o)
o = o or Animation:new(o)
setmetatable(o, self)
self.__index = self
return o
end
-- 重写 Run 方法
function Bird:Run()
print("Bird:Run Fly:"..self.speed)
end
local Dog = Animation:new(nil)
-- 派生类方法
function Dog:new(o)
o = o or Animation:new(o)
setmetatable(o, self)
self.__index = self
return o
end
local birth = Bird:new(nil)
birth.birth = "hijk"
birth.weight = 10
birth.speed = 100
birth.leg = 2
print("birth.birth:"..birth.birth)
-- 输出: birth.birth:hijk
print("birth.weight:"..birth.weight)
-- 输出:birth.weight:10
print("birth.speed:"..birth.speed)
-- 输出: birth.speed:100
print("birth.leg:"..birth.leg)
-- 输出: birth.leg:2
birth:Run()
-- 输出:Bird:Run Fly:100
local dog = Dog:new(nil)
print("dog.birth:"..dog.birth)
-- 输出:dog.birth:abc
print("dog.weight:"..dog.weight)
-- 输出:dog.weight:1
print("dog.speed:"..dog.speed)
-- 输出:dog.speed:0
print("dog.leg:"..dog.leg)
-- 输出:dog.leg:2
Dog:Run()
-- 输出:Biology:Run:1