工程目录结构:
ParentMother.lua:
1 ParentMother = {}2 3 function ParentMother:Morthername()4 @H_502_31@print("Morther name : HanMeimei")5 end6 7 return ParentMother
ParentFather.lua:
1 ParentFather = {}2 3 function ParentFather:Fathername()4 @H_502_31@print("Father name : liLei") 5 end6 7 return ParentFather
Daughter.lua:
1 @H_502_31@require "ParentMother" 2 @H_502_31@require "ParentFather" 3 4 Daughter = {} 5 6 --不是 Daughter 中一个方法 7 local function Search(key,BaseList) 8 for i=1,#BaseList do 9 local val = BaseList[i][key]10 if val then11 return val12 end 13 end14 return nil15 end16 17 --不是 Daughter 中一个方法18 local function CreateClass()19 local parents = {ParentMother,ParentFather}20 @H_502_31@setMetatable(Daughter,21 {22 __index = function(t,k)23 return Search(k,parents)24 end25 })26 end27 28 29 30 function Daughter:new()31 local self = {}32 CreateClass()33 @H_502_31@setMetatable(self,{__index = Daughter})34 Daughter.__index = Daughter35 return self36 end37 38 function Daughter:Daugthername()39 @H_502_31@print("Daugther name : linda")40 end41 42 return Daughter43 44 --[[45 Lua多继承的实现原理:46 也是利用的元表和元表的__index字段,不同于对象实例化和单一继承不同的是__index字段赋值的是一个函数而不是一个基类的表。47 利用传入__index字段的函数来查找类中找不到的字段(函数中遍历该类继承的多个基类)48 --]]
Main.lua:
1 @H_502_31@require "Daughter" 2 3 local child = Daughter:new() 4 child:Daugthername() 5 child:Morthername() 6 child:Fathername() 7 8 --[[ 9 运行结果:10 Daugther name : linda11 Morther name : HanMeimei12 Father name : liLei13 --]]
码云上的相关工程:https://gitee.com/luguoshuai/LearnLua
总结以上是内存溢出为你收集整理的Lua面向对象 --- 多继承全部内容,希望文章能够帮你解决Lua面向对象 --- 多继承所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)