Lua 面向对象 创建类实例

Lua 面向对象 创建类实例

面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构

常用的面向对象编程语言:C++、Java、Object-C、C# 等

面向对象特征:封装、继承、多态

Lua 中的面向对象
对象由属性和方法(函数)组成,Lua 中最基本的结构是 table,所以需要用 table 来描述对象。
继承可以通过 metetable 模拟。

下面展示 类实例 的创建

local Biology = { birth = "", weight = 1, speed = 0 }

-- 创建对象实例
function Biology:new(o)
    o = o or {}

	setmetatable(o, self)

	self.__index = self

	return o
end

-- 函数 :Eat
function Biology:Eat(value)
    self.weight = self.weight + value
	print("Biology Eat:"..self.weight)
end

-- 函数 .Run
function Biology.Run(self, value)
    self.speed = value
    print("Biology.Run:"..value)
end

-- 创建对象实例
local b1 = Biology:new(nil)
-- 创建对象实例
local b2 = Biology:new(nil)

-- 赋值
b1.weight = 100

-- 赋值
b2.weight = 500

print("b1.weight:"..b1.weight)
-- 输出:b1.weight:100

print("b2.weight:"..b2.weight)
-- 输出:b2.weight:500

-- 调用方法,使用冒号 : 将 self 传递进去
b1:Eat(10)
-- 输出:Biology Eat:110

-- 调用方法,使用点 . 所以需要将 self 传递进去 b2.Eat(b2, 30)
b2.Eat(b2, 30)
-- 输出:Biology Eat:530

-- 调用方法,使用冒号 : 将 self 传递进去
b1:Run(100)
-- 输出:Biology.Run:100

b2.Run(b2, 200)
-- 输出:Biology.Run:200

print("b1.speed:"..b1.speed)
-- 输出: b1.speed:100

print("b2.speed:"..b2.speed)
-- 输出:b2.speed:200

从上方代码输出结果可以看出来
表 Biology 可以看做是类
通过 Biology:new(nil) 创建对象是为类的实例分配内存的过程。每个类实例(b1、b2)都有属于自己的内存 两个相互独立的类实例,
调用的属性 weight、speed
调用的函数 :Eat、:Run
都是互不干扰的

访问属性可以使用点号 .
b1.speed

function Biology:Eat(value)
访问成员函数可以使用冒号 :
b1:Eat(10)

访问成员函数也可以使用点号 . 然后在第一个参数位置将实例自己传递进去
b2.Eat(b2, 30)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值