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

前言
本篇在讲什么

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学习笔记:面向对象的实现_第1张图片

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


♠ 继承

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

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

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

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

Lua学习笔记:面向对象的实现_第2张图片

将表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())

Lua学习笔记:面向对象的实现_第3张图片

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


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

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

本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处

你可能感兴趣的:(lua学习笔记,lua,学习,笔记)