博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16面向对象
阅读量:6676 次
发布时间:2019-06-25

本文共 3680 字,大约阅读时间需要 12 分钟。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
01:定义一个类

--定义一个类person={name="唐孝辉",age=26}person.eat=function (self)print(self.name.."今年"..self.age.."岁了")endperson.eat(person)--唐孝辉今年26岁了
--定义一个类person={name="唐孝辉",age=26}function  person:eat()print(self.name.."今年"..self.age.."岁了")endperson:eat()--唐孝辉今年26岁了

02:

创建构造函数,以用于构造拥有相同属性和函数的对象

--创建新的类--通过newfunction person:new()t={}setmetatable(t,{__index=self})return tendperson1=person:new()person1:eat()person1.name="2522"person1:eat()--匿名函数person.sum=function()print(8845)endperson.sum()--唐老鸭今年100--唐老鸭今年100--2522今年100

03:继承

-继承student=person:new(nil)student.grade=200student:eat()print(student.name)
person={age,name,address="中国"}function person:show()print(self.age,self.name,self.address)endperson:show()--面向对象function person:new()obj={}setmetatable(obj,person)person.__index=personreturn objendnewPerson=person:new()newPerson.name="遇到的"newPerson.age=200newPerson:show()

在这里插入图片描述

04:类中的成员

Hero={name,hp,mp,attack} --创建表function Hero:attack1()print("攻击方法1")endfunction Hero:attack2()print("攻击方法2")endfunction Hero:toString()str=string.format("名字:%s 生命值:%s 魔法值:%s 攻击力:%s",self.name,self.hp,self.mp,self.attack);print(str)end--面向对象function Hero:new()obj={}setmetatable(obj,Hero)self.__index=selfreturn objendsum=Hero:new()sum.name="好的"sum.hp=100sum.mp=500sum.attack=888sum:attack1()  --攻击方法1sum:attack2()  --攻击方法2sum:toString() --名字:好的 生命值:100 魔法值:500 攻击力:888

另一种面向对象

local _class={
}function class(super) local class_type={
} class_type.ctor=false class_type.super=super class_type.new=function(...) local obj={
} do local create create = function(c,...) if c.super then create(c.super,...) end if c.ctor then c.ctor(obj,...) end end create(class_type,...) end setmetatable(obj,{
__index=_class[class_type] }) return obj end local vtbl={
} _class[class_type]=vtbl setmetatable(class_type,{
__newindex= function(t,k,v) vtbl[k]=v end }) if super then setmetatable(vtbl,{
__index= function(t,k) local ret=_class[super][k] vtbl[k]=ret return ret end }) end return class_typeendbase_type=class() -- 定义一个基类 base_typefunction base_type:ctor(x) -- 定义 base_type 的构造函数 print("base_type ctor") self.x=xendfunction base_type:print_x() -- 定义一个成员函数 base_type:print_x print(self.x)endfunction base_type:hello() -- 定义另一个成员函数 base_type:hello print("hello base_type")endtest=class(base_type) -- 定义一个类 test 继承于 base_typefunction test:ctor() -- 定义 test 的构造函数 print("test ctor")endfunction test:hello() -- 重载 base_type:hello 为 test:hello print("hello test")enda=test.new(1) -- 输出两行,base_type ctor 和 test ctor 。这个对象被正确的构造了。a:print_x() -- 输出 1 ,这个是基类 base_type 中的成员函数。a:hello() -- 输出 hello test ,这个函数被重载了

05.—index是一个函数的时候

local RoleCache = {
}RoleCache.name="角色缓存";return RoleCache;
local Cache = {
};Cache.name="基类缓存";local filePaths = {
role = "RoleCache"; --角色缓存 }local mt = {
};--当cache调用了不存在的role字段时--就会调用table元表里的__index元方法--并且会传递table和字段名两个参数mt.__index = function (t, key) if filePaths[key] then t[key] = require(filePaths[key]); print("表的名字:"..t.name); print( t[key].name) else return nil; end return t[key]; --返回的是Cache中查找的表endsetmetatable(Cache, mt)return Cache;
local cache =require("Cache");local role=cache.role;--print(role.name)

表的名字:基类缓存

角色缓存
在这里插入图片描述

转载地址:http://vnrxo.baihongyu.com/

你可能感兴趣的文章
负载均衡在分布式架构中是怎么玩起来的?
查看>>
Java程序员在工作的同时应该具备什么样的能力?
查看>>
Dubbo深入分析之Cluster层
查看>>
分析Padavan源代码,二
查看>>
WordPress的WPML外挂出问题恐出现安全漏洞
查看>>
Django 调试技巧
查看>>
Spring Boot和thymeleaf , freemarker , jsp三个前端模块的运用
查看>>
phalcon-入门篇3(优美的URL与Config)
查看>>
单表60亿记录等大数据场景的MySQL优化和运维之道
查看>>
sql学习笔记
查看>>
maven编译时出现There are test failures
查看>>
SpringBoot | 第三十一章:MongoDB的集成和使用
查看>>
网络学习笔记2
查看>>
JPA--多对多关系
查看>>
配置sharepoint 2010错误:Microsoft.SharePoint.Upgrad...
查看>>
UUID 生成算法JS版
查看>>
JAVA中,Map转实体类、实体类转Map的方法
查看>>
获取n!的末尾有多少个0?
查看>>
使用递归遍历并转换树形数据(以 TypeScript 为例)
查看>>
PHP类推荐:QueryList|基于phpQuery的无比强大的PHP采集工具
查看>>