lua面向对象(继承及多继承)

╮(╯_╰)╭还是个人感觉,LUA轻量简洁的语法,正式在于表这种类似于对象的使用,表:

  • 拥有状态
  • 独立于其值的标识
  • 独立于创建者和创建地的生命周期

1.使用自参数是所有面向对象的语言的一个核心。大多数面向对象语言都能对我们隐藏部分自我参数,从而使我们不需要显示的调用这个参数。

(就跟此差不多)LUA使用该参数需要使用冒号

T = {A = 10} ------不使用

funtion t.add(self,x)

self.a = self.a + X

结束

t.add(5)

T = {A = 10} -------使用

函数t:add(x)

self.a = self.a + X

结束

T:添加(5)

 

2.继承(继承就是子类Ç能拿到父类˚F的成员,所以只需要把Ç.__索引设置为˚F就好了)

帐户= {平衡= 0} - ---父类

函数Account:new(o)------把Account设置为o的元表,相当于父类.o为子类

o = o或{} - 不传参数,则创建一个空表

setmetatable(个体,O)

自.__指数=自

返回o

结束

功能帐户:存款(v)

self.balance = self.balance + V

结束

功能帐户:撤回(v)

如果v> self.balance,那么错误“----”结束

self.banlance = self.balance-V

结束

SpecialAccount = Account:new() - 一个子类

S = SpecialAccount:新的{极限= 1000}

s.deposit(100)----这时会查询s的父类SpecialAccount,没找到,再查询Account,找到deposit实现

 

3.多重继承

本地函数搜索(k,list)-----列表中存放所有的父类

对于i = 1,#列表做

本地v =列表[i] [k]

如果v然后返回v结束 - 假设子类没有成员k,那就要到每个父类中查找k是否为nil,不为nil就返回父类这个k

结束

结束

函数createClass(...。)

本地c = {} - 新类

本地父= {...。}

setmetatable(c,{__ index = function(t,k) - 类在其他类中搜索方法

返回搜索(k,父母)

结束})

c .__ index = c - 将c作为其实例的元表

函数c:new(o) - 为这个新类定义一个新的构造函数

o = o或{}

setmetatable(O,C)

返回o

结束

返回c - 返回新类

结束

假设有两个类,一个是之前的帐户,一个是名称类,他有两个方法的setName,的getName:

命名= {}

函数名称:getname()

返回self.name

结束

函数name.setname()

self.name =正

结束

现在创建一个nameAccount类,同时从名称和帐号派生,只需要调用createClass

nameAccount = createClass {帐户,名称}

账户= nameAccount:新{名称=” FCW”}

打印(帐户:getname)---打印fcw

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lua是一种脚本语言,它支持面向对象编程。在Lua中,我们可以通过表(table)来实现面向对象编程。表可以被看作是一个对象,它可以存储任意类型的数据(包括函数),还可以作为其他表的元素。下面是使用Lua实现面向对象的一些基本步骤: 1. 创建一个表,它代表一个类 2. 在这个表中定义一个构造函数,用于创建该类的实例 3. 在这个表中定义其他成员函数和成员变量 4. 在这个表中定义一个元表,用于实现继承和多态 下面是一个简单的例子,展示了如何使用Lua实现一个名为Person的类: ```lua -- 创建一个Person类 Person = {} -- 定义Person的构造函数 function Person:new(name, age) local obj = {} obj.name = name obj.age = age setmetatable(obj, self) self.__index = self return obj end -- 定义Person的成员函数 function Person:sayHello() print("Hello, my name is " .. self.name .. ", I'm " .. self.age .. " years old.") end -- 创建一个Person对象 local person = Person:new("Tom", 20) -- 调用对象的成员函数 person:sayHello() ``` 在这个例子中,我们首先创建了一个空表Person,它代表一个类。然后我们定义了Person的构造函数new,用于创建Person的实例。在构造函数中,我们创建了一个新表obj,并将name和age属性赋值给它。然后我们使用setmetatable函数将obj的元表设置为Person,并将self设置为__index。这样做可以让obj继承Person的成员函数。最后,我们返回obj。 接下来,我们定义了Person的成员函数sayHello,它用于打印出人的姓名和年龄。在最后,我们创建了一个Person对象person,并调用它的成员函数sayHello。 如果你想要继承Person类,你可以创建一个新的表Student,并将它的元表设置为Person。这样做可以让Student继承Person的成员函数和属性。如果你想要重写某个成员函数或属性,你可以直接在Student表中重新定义它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值