Lua学习笔记:面向对象的实现

本文介绍了Lua中的面向对象编程实现,主要涉及基于表的特性、继承概念以及类的创建。通过实例展示了如何使用元表和元方法实现继承,以及如何通过`new`函数创建类和对象,并允许方法重写。文章适合Lua初学者,强调实践操作和快速上手。
摘要由CSDN通过智能技术生成
前言
本篇在讲什么

Lua中的面向对象的实现
本篇适合什么

适合初学Lua的小白
本篇需要什么

Lua语法有简单认知
依赖Sublime Text编辑器

本篇的特色

具有全流程的图文教学
重实践,轻理论,快速上手
提供全流程的源码内容


★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈


♠ 前言

本章节了解一下Lua如何实现面向对象编程


♠ 表的特性

首先我们需要知道,Lua的表是关键,Lua面向对象编程基本上是基于表的特性来实现的

如果你对表还不太了解,建议先过一遍Lua的类型和基本语法

菜鸟教程:Lua table

我们知道Lua表的键值可以是除了nil的任意类型,如此,我们可以为其设置函数,如下所示

-- 学生
Student = {}

-- 获取分数
Student.getGrade = function()
    return 0 
end

我们声明了一个名为Student的全局表
我们为表添加属性getGrade,并为其付了一个方法
可以通过Student.getGrade()来调用方法,获取学生分数
方法的定义还可以以下的方式,二者没有本质区别

-- 获取分数
function Student.getGrade()
    return 0 
end

-- 获取分数
function Student:getGrade()
    return 0 
end

上述代码设计到一点Lua语法糖的内容,可以参考之前文章

Lua学习笔记之“.”和“:”的作用和用法

为此又有一个比较重要的点self出现了,self是所有面向对象语言的核心点,Lua语言可以在方法体内代替表本身

在这里插入图片描述

上述对方法的定义,基本是就是我们平时比较熟悉的函数了,但是仅仅这些还是不够的


♠ 继承

首先我们了解在Lua中是如何实现继承的概念的

本模块用到了table的元表和元方法相关的内容,本篇不在累述,不熟悉的可以去参考之前的文章

lua:浅谈对元表和元方法的认识

了解元表,应该都对__index元方法有印象,设置了该元方法的表,在查询的时候会去调用__index元方法,这就满足了继承需要的功能,看下面例子

在这里插入图片描述

将表Student赋值给元表mt的__index方法
给表StudentA设置mt元表
调用StudentA.grade,StudentA没有,查Student


♠ 类

我们还需要考虑如何通过Lua去实现面向对象的几个特点,包括类体系、继承和私有性

我们稍微修剪一下代码,让结构变得更熟悉,一个简单的根据基类创建新类的过程我们就做好了

-- 学生
Student = {}

function Student:new(o)
    o = o or {}
    self.__index = self
    setmetatable(o, self)
    return o
end

function Student:printGrade()
    print("Student:5")
end

function Student:printAge()
    print("Student:18")
end

-- 小帅
StudentA = Student:new()

function StudentA:printGrade()
    print("StudentA:10")
end

print(StudentA:printGrade())
print(StudentA:printAge())


StudentB = StudentA:new()

function StudentB:printAge()
    print("StudentB:17")
end

print(StudentB:printGrade())
print(StudentB:printAge())

在这里插入图片描述

基类Student,根据基类延伸出的子类StudentA,根据子类延伸出的新子类Student,都可以对父类的方法进行重写,并且可以继承父类的方法和属性


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

👉 本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处👈
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值