Lua 面向对象 继承 二

这篇博客介绍了Lua中面向对象编程的简化版继承实现。通过创建Biology、Animation、Bird和Dog类,展示了类的层级结构以及派生类方法。Bird类重写了Run方法,Dog类则继承了Animation的特性。示例代码演示了对象实例的创建及属性访问,以及方法调用的过程。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值