-- 类的例子,长方形的类,具备一个打印面积方法和一个设置长宽的方法
--lua实现类的思路,定义出来的对象在lua中可以访问自己有的成员,访问成员函数实际上是通过元表的__index方法实现的,具体点就是访问自己的成员函数,发现没有函数,然后判断是否有元表和__index元方法(当然都有,而且是必须有),然后就变成了访问元表也就是类的成员,自然就访问了成员函数
Cfx = { m_chang = , m_kuan = , m_area = }
Cfx.__index = Cfx
function Cfx:new(chang, kuan)
local self = { }
setmetatable(self, Cfx)
self.m_chang = chang
self.m_kuan = kuan
self.m_area = chang * kuan
return self
end function Cfx:printArea()
print("长方形的面积为:" .. self.m_area)
end function Cfx:setC(chang, kuan)
if chang then
self.m_chang = chang
end
if kuan then
self.m_kuan = kuan
end
self.m_area = self.m_chang * self.m_kuan
end r1 = Cfx:new(, )
r1:printArea()
r2 = Cfx:new(, )
r2:printArea()
r1:setC(_, )
r2:setC()
print("----------------------------------------------------------------")
r1:printArea()
r2:printArea() --Lua实现继承,继承自上面的长方形类,同时具备自身的成员(周长)和一个打印周长的方法
--继承也是跟上面所说的类的构建同理,可以看成是C++中的先构造一个父类,然后再构造自己,所以可以理解为有两个类构造出来了
Cfx_w ={m_zhouchang=}
Cfx_w.__index=Cfx_w
setmetatable(Cfx_w,Cfx) function Cfx_w:new(c,k)
local self ={}
self=Cfx:new(c,k)
setmetatable(self ,Cfx_w)
self.m_zhouchang=*(c+k)
return self
end function Cfx_w:printZ()
self.m_zhouchang=*(self.m_chang+self.m_kuan)
print ("长方形的周长为:" .. self.m_zhouchang)
end function Cfx_w:printArea()
print ("重写父类方法,长方形面积是:".. self.m_area)
end
r3=Cfx_w:new(,)
r3:printArea()
r3:printZ()
print ("****************************************************************")
r3:setC(,)
r3:printArea()
r3:printZ()

   

      lua实现类的思路,定义出来的对象在lua中可以访问自己有的成员,访问成员函数实际上是通过元表的__index方法实现的,具体点就是访问自己的成员函数,发现没有函数,然后判断是否有元表和__index元方法(当然都有,而且是必须有),然后就变成了访问元表也就是类的成员,自然就访问了成员函数。

Lua实现简单的类,继承,多态 实例的更多相关文章

  1. python 面对对象 类(继承, 多态)

    继承,继承其它实例化样本的属性和方法,需要在声明里重新定义和使用 class School(object): def __init__(self, name, addr): self.name = n ...

  2. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

  3. Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

    一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...

  4. python开发面向对象基础:接口类&抽象类&多态&钻石继承

    一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...

  5. Day 23 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  6. Lua类和类继承实现

    Lua本身是不能像C++那样直接实现继承,但我们可以用万能的table表来实现. 以下我总结了三种方式的类以及继承的实现 第一.官方的做法,使用元表实现 原理参照<Programming in ...

  7. Java中关于继承、类、多态、接口的知识点

    继承 含义:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类 优点:1)代码的重用性:2)子类扩展父类的属性和方法:3)父类的属性和方法可用于子类:4)设计应用程序 ...

  8. Lua面向对象之二:类继承

    1.类继承 ①代码 Sharp = { } --① 父类 function Sharp:new() local new_sharp = { } self.__index = self --②,self ...

  9. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

随机推荐

  1. 让DuiLib CheckBox支持全选、全不选、非全选三种状态

    原文 https://blog.csdn.net/EveyX/article/details/38433783 DuiLib官方库中的Checkbox只有Checked和Uncheck两种状态,但我们 ...

  2. 2019牛客暑期多校训练营(第五场)F maximum clique 1 二分图求最大独立集

    https://ac.nowcoder.com/acm/contest/885/F #include <bits/stdc++.h> //CLOCKS_PER_SEC #define se ...

  3. [SaSS] Using Object like style to create class dynamiclly

    $black: #; $white: #fff; $yellow: #ffe183; $dark-red: #e70404; $dark-green: #0d8268; $cloud-blue: #d ...

  4. 解决eslint与webstorm关于script标签的缩进问题

    解决eslint与webstorm关于script标签的缩进问题 2018年12月29日 23:16:29 tozeroblog 阅读数 752   问题重现在vue-cli中,使用eslint时会对 ...

  5. windows游戏编程键盘

    键盘 首先我们来看一下键盘常用消息 键盘的消息处理过程 键盘消息会有击键消息和字符消息 键盘消息的附加参数 wParam:非系统键的虚拟码 lParam: windows常用虚拟键码及对应的按键

  6. 第二章实战补充:Python操作Mysql

    ( 一) 导入pymysql 基础铺垫:pymysql与MySQLdb pymysql–支持py2.py3; MySQLdb–仅支持python3; django内部默认为MySQLdb,用Pytho ...

  7. vue 使用 echart ,自定义样式案例

    1.vue 安装 echart 库 npm install echarts --save 2.vue代码 引入 let echarts = require("echarts/lib/echa ...

  8. JAVA RPC (九) netty服务端解析

    源码地址:https://gitee.com/a1234567891/koalas-rpc 企业生产级百亿日PV高可用可拓展的RPC框架.理论上并发数量接近服务器带宽,客户端采用thrift协议,服务 ...

  9. JS的十大排序算法

     名词解释: n: 数据规模k:“桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额外内存稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同 冒泡排序(Bub ...

  10. jinja2-模版简介

    一 简介 在Flask中,调用render_template来对模版进行渲染,使用render_template,只需要导入这个API就可以,from flask import render_temp ...