Lua 中继承与多态继承的实现引言目标背景知识类的特性原表实现类 - 封装继承类 - 继承与多态继承类 - 多重继承Reference 引言在 lua 中并没有类的概念。但是 lua 有一个数据结构 table,我们可以基于 table 数据结构来实现类似于 C++ 中的类。目标实现一个类似其他语言中的类的 class
支持类与类之间的继承支持类之间的多重继承背景知识类的特性封装:面向对象编程与            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-03 12:28:48
                            
                                324阅读
                            
                                                                             
                 
                
                             
         
            
            
            
              近期通过一些巧合 或者说 思想转变吧 。。。   js面向对象设计 很多都会用到  原型继承和多态 再加以封装 我通过一些大佬视频 和 学习博客 来分享一波自己的见解   如果有描述不当之处 还请及时评论,我看到的话,有时间会给予回复和沟通,谢谢!   基础知识不多赘述,来看以下几种继承方式: 原型继承    这里可以通过构造函数创建            
                
         
            
            
            
            原理1. lua的面向对象是基于元表metatable实现的,原理即在一个表中查找不到,就到元表中查找2. lua的多继承原            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-12-14 11:10:27
                            
                                523阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            原理1. lua的面向对象是基于元表metatable实现的,原理即在一个表中查找不到,就到元表中查找2. lua的多继承原            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-12-14 11:10:30
                            
                                257阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在Lua中如何模拟“继承”方法是通过元表来模拟“继承”。如下所示,先定义一个A作为父类;再实现New方法,该方法主要是将A设置为o的元表,然后返回o;最后将A:New返回的值赋值给B,此时B就是继承于A。在New中有一个关键的一步是self.__index = self,这一步必不可少,原因是当你通过Key来访问表中的值,若表中该Key为nil,那么Lua会寻找元表中__index键;__inde            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-13 07:24:44
                            
                                60阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            继承的概念继承是一种类与类的关系,就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为,继承是实现代码复用的一种方式,继承实现了面向对象模块的层次性。被继承的类叫做基类或父类,继承后产生的新类叫派生类或子类。 上图所示是一个具有三级层次的继承结构,动物是食草动物、食肉动物的基类,食草动物是兔子、羊的父类;兔子、羊又是食草动物的子类;食草动物、食肉动物是动物的子类。继承的实现C            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-03 10:45:29
                            
                                86阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Account = {balance = 0}function Account:new (o)o = o or {}setmetatable(o, self)self.__index = selfprint("This is Base")return oend...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2013-01-08 16:56:00
                            
                                142阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
             最近做的一个项目用到了Lua,所以也顺便学习了些,想必玩过魔兽的朋友都听说过lua,不过相对来说用这个的还是不多。  面向对象只是一种思想,在Lua我们也可以实现,减少了冗余代码。先建一个类 person
  person={
    name="a",
    age = 23,
    high=177,
    weight=65
} 在pserson表里,我            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-14 14:42:30
                            
                                23阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            基类:基类定义了所有对于派生类来说普通的属性和方法,派生类从基类继承所需的属性和方法,且在派生类中增加新的属性和方法。继承:继承是C++语言的一种重要机制,它允许在已定义的类的基础上产生新类。 lua基类和C++基类极为相似,但是lua中却没有继承这一说,更没有所谓的派生类。lua只能通过一种行为(元表)来模拟C++继承这一方法。元表:lua中提供的元表是用于帮助lua数据变量完成某些非            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-26 22:58:13
                            
                                56阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、多继承1、多继承基本语法2、多继承子类构造初始化3、多继承中访问父类成员二、多继承案例1、代码示例 - 简单多继承案例2、代码示例 - 多继承构造函数案例            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-10-28 05:58:02
                            
                                295阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            学过java或者C++的小伙伴肯定知道什么是继承,因为继承是面向对象的一大特征。面向过程的语言就不能实现继承了,lua也是一样。不过lua强大的table可以利用元表模拟出继承的功能。下面我就说下一如何用lua实现面向对象中继承的功能。什么是继承?曹操是三国时期杰出的政治家,文学家,书法家,军事家。总之这人很牛X!他的儿子们也都各有所长,为什么要说他的儿子们呢?因为:曹丕:继承了曹操的政治和谋略            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-26 10:06:19
                            
                                44阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、多继承即一个子类有多个父类,它继承了多个父类的特性。  但多继承中会存在一个问题:即当某类的部分或全部直接基类是从另一个共同基类派生而来时, 在这些直接基类中从上一级共同基类继承而来的成员就拥有相同的名称,在派生类的对象中,这些同名的数据成员在内存中同时拥有多个副本,同一个函数名会有多个映射。这就是所谓的菱形继承问题(下面会给出图形),即A是B和C的直接基类,而D又继承了B和C。解决这一问题有            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-29 09:29:52
                            
                                183阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            总结:  C++中一个派生类中允许有两个及以上的基类,我们称这种情况为多继承  使用多继承可以描述事物之间的组合关系,但是如此一来也可能会增加命名冲突的可能性,冲突可能很有可能发生在基类与基类之间,基类与派生类之间。命名冲突是必须要解决的问题。  为了解决命名冲突问题我们只能采用域解析操作符来区分具体所调用的类中的成员函数。  在前面所有的例子中,派生类都只有一个基类,我们成这种情况为单继承。而在            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-21 13:55:26
                            
                                44阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.多继承 1.1优点: 代码复用性:多继承可以从多个父类中继承不同的属性和方法,从而提高了代码复用性。 灵活性:多继承可以让一个类拥有不同父类的多种特性和方法,从而使得类更加灵活。 逻辑清晰:多继承可以更好地反映实际情况中的继承关系,使代码的逻辑更加清晰。 1.2缺点: 命名冲突:多个父类中可能存在相同名称的属性和方法,这就可能导致命名冲突的问题。 复杂性:多继承会增加代码的复杂性,使得代码难以            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-14 11:13:01
                            
                                37阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            --多重继承local function search(k,plist)	for i=1,#plist do local v=plist[i][k] -- 取一个基类 if v then return v end	endendfunction createClass(...)	local c={};	local parents={...};	setmetatable(c,{__index=function(t,k) return search(k,parents) end } );	c.__index=c;	function c:new(o) o=o or {}; setmetat...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2013-02-28 15:02:00
                            
                                178阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            线性表的定义:N个数据元素的有限序列线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表)顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an)链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组。是            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-09 15:55:28
                            
                                41阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Lua元表使用 中的__index元方法可以实现面向对象和继承关系:lua中没有类的概念,只有table,但可以用__index模拟类和对象:local A = {}
function A:new(name)
    self.__index = self
    
    return setmetatable({ 
        name = name 
    }, self)
end            
                
         
            
            
            
            我们都知道类具有抽象、封装,继承、多态等特性。 lua中的数据集合都是以表的形式呈现,一个table就是一个类。而lua中继承的实现以元表和元方法来实现。下面看下lua中类的简单实现:---创建类
---@param className string 类名
---@param superClass table|function|nil Class 父类
function Class(classNa            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-04 19:50:31
                            
                                53阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            lua - 多继承1,模拟伪继承新建extend_test.lua新建extend_test.luasetmetable(a,b) b对象是a 对象的父类a继承于bAccount = { num = 10}function Account:new(o) o = o or {} setmetatabl...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2015-01-11 17:06:00
                            
                                92阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在lua的手册中,描述,lua是不存在类这种概念的。或者说是因为lua中对象太强大,可以做到类的所有事情。  不过lua可以做到模仿类的这种方式,也是非常有好处的。  lua中会把一个或者多个对象作为原型,然后去继承它们,得到新的对象。  lua中的类技术,最关键的点有两个,一个是关键字self,它可以保证其他对象可以使用这个对象的函数。  另一个是__index,这个是实现继承的基础。当然有一种            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-02 20:06:41
                            
                                55阅读