当前位置: 首页 > wzjs >正文

建设大型购物网站网络公司给我们做的网站_但是我们不知道域名是否属于我们

建设大型购物网站,网络公司给我们做的网站_但是我们不知道域名是否属于我们,沭阳网站定制,广州网络建站Lua 本身没有像 Java、C# 那样内置的面向对象机制,但可以通过 Lua 的表(table)和元表(metatable)来模拟实现面向对象的三大特性:封装、继承和多态。 目录 1. 封装 2. 继承 3. 多态 1. 封装 封装是指将…

Lua 本身没有像 Java、C# 那样内置的面向对象机制,但可以通过 Lua 的表(table)和元表(metatable)来模拟实现面向对象的三大特性:封装、继承和多态。

目录

1. 封装

2. 继承

3. 多态


1. 封装

封装是指将数据和操作数据的方法绑定在一起,隐藏对象的内部实现细节,只对外提供必要的接口。在 Lua 中,可以使用表来实现封装。

下面是lua代码示例(该lua代码在Sublime Text之中运行)

-- 定义一个类(其实是一个表)
local Person = {}-- 构造函数
function Person:new(name, age)local obj = {}self.__index = selfsetmetatable(obj, self)-- 封装属性obj.name = nameobj.age = agereturn obj
end-- 封装方法
function Person:introduce()print("My name is " .. self.name .. ", and I'm " .. self.age .. " years old.")
end-- 创建对象
local person = Person:new("John", 25)
-- 调用方法
person:introduce()

在上述代码中,Person 是一个表,代表一个类。new 函数是构造函数,用于创建 Person 类的对象。introduce 是一个方法,用于打印对象的信息。通过这种方式,将属性和方法封装在 Person 类中。

运行结果:

2. 继承

继承是指一个类可以继承另一个类的属性和方法,从而实现代码的复用。在 Lua 中,可以通过设置元表来实现继承。

下面是lua代码示例(该lua代码在Sublime Text之中运行)

-- 基类 Person
local Person = {}function Person:new(name, age)local obj = {}self.__index = selfsetmetatable(obj, self)obj.name = nameobj.age = agereturn obj
endfunction Person:introduce()print("My name is " .. self.name .. ", and I'm " .. self.age .. " years old.")
end-- 子类 Student 继承自 Person
local Student = {}
setmetatable(Student, {__index = Person})function Student:new(name, age, grade)local obj = Person:new(name, age)self.__index = selfsetmetatable(obj, self)-- 新增属性obj.grade = gradereturn obj
end-- 新增方法
function Student:study()print(self.name .. " is studying in grade " .. self.grade .. ".")
end-- 创建 Student 对象
local student = Student:new("Alice", 20, 3)
-- 调用基类方法
student:introduce()
-- 调用子类方法
student:study()

在上述代码中,Student 是 Person 的子类。通过 setmetatable(Student, {__index = Person}) 让 Student 继承 Person 的属性和方法。Student 类还可以定义自己的属性和方法。

运行结果:

3. 多态

多态是指不同的对象对同一消息做出不同的响应。在 Lua 中,可以通过重写方法来实现多态。

下面是lua代码示例(该lua代码在Sublime Text之中运行)

-- 基类 Shape
local Shape = {}function Shape:new()local obj = {}self.__index = selfsetmetatable(obj, self)return obj
endfunction Shape:draw()print("Drawing a shape.")
end-- 子类 Circle 继承自 Shape
local Circle = {}
setmetatable(Circle, {__index = Shape})function Circle:new()local obj = Shape:new()self.__index = selfsetmetatable(obj, self)return obj
end-- 重写 draw 方法
function Circle:draw()print("Drawing a circle.")
end-- 子类 Rectangle 继承自 Shape
local Rectangle = {}
setmetatable(Rectangle, {__index = Shape})function Rectangle:new()local obj = Shape:new()self.__index = selfsetmetatable(obj, self)return obj
end-- 重写 draw 方法
function Rectangle:draw()print("Drawing a rectangle.")
end-- 定义一个函数,接收 Shape 类型的对象
function drawShape(shape)shape:draw()
end-- 创建不同的对象
local circle = Circle:new()
local rectangle = Rectangle:new()-- 调用 drawShape 函数,实现多态
drawShape(circle)
drawShape(rectangle)

在上述代码中,Circle 和 Rectangle 都继承自 Shape 类,并且重写了 draw 方法。drawShape 函数接收一个 Shape 类型的对象,根据传入的对象类型不同,调用不同的 draw 方法,从而实现了多态。

运行结果:

http://www.dtcms.com/wzjs/592244.html

相关文章:

  • 北京建设工程联合验收网站动画小视频制作神器
  • 宜春市住房和城乡建设局网站网站内页修改关键字
  • 哪些是asp网站专业vi设计哪家好
  • 网站怎样注册备案天津做网站找哪家公司好
  • 太原电商网站设计shopify seo
  • 网站开发进度确认单网站建设的钱计入什么科目
  • 做电影下载网站成本企业网络搭建案例
  • 制作公司网站在公账汇款时用途备注什么北仑网站建设培训学校
  • 网页模板王襄阳seo招聘
  • 天津网站优化排名营销型网站设计房地产
  • 沈阳工程建设信息网站中企动力企业
  • 广东网站建设联系wordpress 后台登陆
  • 法律服务网站建设企业vi设计的作用与意义
  • 凡科网站建设好公司logo生成器免费
  • 品牌网站建设源码wordpress实用插件
  • 做网站购买空间多少钱企业建网站需要什么
  • 网站题头是什么设计配色推荐的网站
  • 基于php的个人网站设计论文智能模板网站建设收费
  • 怎么查询网站是谁做的小程序商城哪家好服务
  • 做软装设计找图有什么好的网站网站的手机站页面重复
  • 济宁门户网站建设建邺html5响应式网站
  • 做网站卖什么东西好织梦校园招生网站源码
  • 做网站咋做汉阳网页设计
  • 网络公司建网站广州app搭建
  • 响应式机械类网站网站需要哪些备案
  • 南京市公共资源建设中心网站中装建设集团有限公司股票
  • 蓝田微网站建设中山公司网站建设
  • 外国人做的篆字网站中国建设银行网站首页u盾登入
  • 信阳高端网站建设软件设计师中级考什么
  • 网站开发最佳实践莱芜警方网站官网