美文网首页
lua的面向对象

lua的面向对象

作者: d546d748d718 | 来源:发表于2017-12-18 16:47 被阅读0次

直接贴代码,参考的也是别人的,只不过其中几点,增加一点自己的理解
http://blog.sina.com.cn/s/blog_89d90b7c0102x9f1.html

local BaseClass = {};
print("BaseClass是"..tostring(BaseClass));
-- 定义index属性,指向本身
BaseClass.__index = BaseClass;
-- 定义构造函数
function BaseClass:new(a)
-- 定义私有表,属性存储在子表obj中
local obj = {["a"] = a};
-- 设置obj表的原表为self,即BaseClass
-- 此时查找obj的属性就会自动去查找BaseClass,同时查找Baseclass又会自己找自己
setmetatable(obj, self);
return obj;
end

-- 定义成员方法
function BaseClass:PrintInfo()
print("表是"..tostring(self).."打印信息"..self.a);
end

local classObj = BaseClass:new(10);
print("新对象是"..tostring(classObj));
-- classObj没有printInfo方法,而是通过元表,得到的BaseClass的PrintInfo方法,打印中
--传递过去的self其实是classObj自身
classObj:PrintInfo();


lua面向对象1.png

-- 子类,继承
local childClass = {};
--设置子类元表,子类没有就去父类寻找
setmetatable(childClass, BaseClass);
--设置index属性,指向自身
childClass.__index = childClass;
-- 子类构造函数
function childClass:new(a,b)
-- 和BaseClass一样的方式
-- 不同之处在于子表要“继承”父类
local obj = BaseClass:new(a);
-- 添加自身特有属性
obj.b = b;
setmetatable(obj,self);
return obj;
end

--子类的方法
function childClass:PrintChildInfo()
print("子类的方法"..self.b);
end

-- 多态
-- 重写父类方法
function childClass:PrintInfo()
--这里的self是子类中的子表
print("多态"..self.a);
end

local childObj = childClass:new(50, 5);
childObj:PrintChildInfo();
--调用childObj没有的方法,查找元表BaseClass
childObj:PrintInfo();

打印的结果是:
子类的方法5
多态50

相关文章

  • 大话C与Lua(五) 面向对象的数据结构——userdata

    如何实现面向对象? 熟悉Lua的同学都知道!在Lua内部已经实现了面向对象的基本机制(table), 同时也为宿主...

  • Lua面向对象

    面向对象特征1) 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。2) 继承:继承的方法允许...

  • Lua 面向对象

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

  • Lua面向对象

    面向对象有三个要点: 1. 对象拥有状态; 2. 对象拥有独立的标志; 3. 对象有独立的生命周期。 在Lua语言...

  • 非常非常详细的Lua面向对象(二)——冒号,点号以及self

    前言 在非常非常详细的Lua面向对象(一)——元表与元方法中说完了一些基础概念,这些是我们使用Lua模拟面向对象的...

  • lua的面向对象

    直接贴代码,参考的也是别人的,只不过其中几点,增加一点自己的理解http://blog.sina.com.cn/s...

  • Lua面向对象编程

    在lua原生语法特性中是不具备面向对象设计的特性。因此,要想在lua上像其他高级语言一样使用面向对象的设计方法有以...

  • Lua面向对象实现

    这个类主要是把基类和派生类绑定起来,并且调用ctor构造函数用法如下 注意调用父类的方法要用"."别用":"是因为...

  • 【Lua】面向对象解析

    写在前面 我们知道lua本身是不支持继承的,在lua中所有的对象都是由table组成的,这里我们都知道可以使用元表...

  • Lua面向对象编程

网友评论

      本文标题:lua的面向对象

      本文链接:https://www.haomeiwen.com/subject/llpmwxtx.html