Lua如何实现继承?

在Lua中,实现继承的方式主要有两种:原型继承和类继承:

1. 使用原型继承

原型继承是指通过使用已有对象创建新对象,并让新对象继承已有对象的属性和方法来实现继承。在Lua中,使用表(table)来实现原型继承。

下面是一个使用原型继承的示例代码:

-- 父类
local Animal = {
  legs = 4,
}

function Animal:new(o)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  return o
end

function Animal:run()
  print("Animal is running")
end

-- 子类
local Dog = Animal:new()

function Dog:bark()
  print("Woof! Woof!")
end

-- 创建Dog对象
local myDog = Dog:new()

-- 调用父类的方法
myDog:run()

-- 调用子类新增的方法
myDog:bark()

-- 输出结果:
-- Animal is running
-- Woof! Woof!

在上面的代码中,Animal是一个父类,它有一个共有属性legs和一个共有方法run。Dog是Animal的子类,它通过调用Animal:new()方法创建了一个新的表并将其设为自己的原型,从而继承了Animal的属性和方法。同时,Dog还新增了一个方法bark。

2. 使用类继承

类继承是指通过定义类和构造函数来实现继承。在Lua中,可以使用闭包和元表来实现类继承。

下面是一个使用类继承的示例代码:

-- 父类
local Animal = {}

function Animal:new(o)
  o = o or {}
  setmetatable(o, {__index = self})
  return o
end

function Animal:run()
  print("Animal is running")
end

-- 子类
local Dog = {}

function Dog:new(o)
  o = o or {}
  local obj = Animal:new(o)
  setmetatable(obj, {__index = self})
  return obj
end

function Dog:bark()
  print("Woof! Woof!")
end

-- 创建Dog对象
local myDog = Dog:new()

-- 调用父类的方法
myDog:run()

-- 调用子类新增的方法
myDog:bark()

-- 输出结果:
-- Animal is running
-- Woof! Woof!

在上面的代码中,Animal和Dog分别定义了自己的构造函数new,并且使用闭包和元表实现了继承关系。在Dog的构造函数中,首先调用了Animal的构造函数创建一个新的对象,然后将这个对象的元表设为Dog自身,从而让它能够调用Dog的成员函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值