lua-面向对象

--面向对象
--lua中类可以通过table【属性】+function【方法】+metetable【继承,不推荐用,只模拟最基本的对象大部分时间够用了】模拟实现

--基类
Shape = {area = 0}

--基类方法 new
function Shape:new(o,side)
  o=o or {}
  setmetatable(o,self)
  self.__index = self  
  side = side or 0
  self.area = side*side  
  return o
end


--基类方法 printArea
function Shape:printArea()
   print("Area== ",self.area)
end


--创建对象
Shape1 = Shape:new(nil,5)
--属性访问,使用点号
print("Area=",Shape1.area)
--函数调用,使用冒号
Shape1:printArea()

print()

--继承:指一个对象直接使用另一对象的属性和方法。可用于扩展基础类的属性和方法。

--继承实例1-正方形
Square = Shape:new()

--派生类方法new
function Square:new(o,side)
  o= o or Shape:new(o,side)
  setmetatable(o,self)
  self.__index = self  
  return o
end

--派生类方法 printArea重写
function Square:printArea()
  print("Square Area =",self.area)
end

Square1 = Square:new(nil,6)
Square1:printArea()

print()

--继承实例2-矩形
Rectangle = Shape:new()

--派生方法 new
function Rectangle:new(o,width,height)
   o = o or Shape:new(o)
   setmetatable(o,self)
   self.__index = self
   self.area = width * height
   
   return o
end

--派生类方法printArea()重写
function Rectangle:printArea()
  print("Rectangle Area =",self.area)
end

Rectangle1 = Rectangle:new(nil,4,7)
Rectangle1:printArea()

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
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值