Lua 面向对象 继承 二

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

猜你喜欢

转载自blog.csdn.net/LIQIANGEASTSUN/article/details/127480816