lua语言——多态

123 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详情

什么是多态????

多态就是同一个接口,使用不同的实例(对象)而执行不同操作,多态性是对象多种表现形式的体现。多态的存在,大概不会就是为了图个方便把


多态存在的三个必要条件

1.继承
2.重写
也就是子类能够重写父类的方法,当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法
3.父类引用指向子类对象
定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。当使用多态方式调用方法时,首先检查父类是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。


多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理

动态连接:当父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;对于父类中定义的方法,如果子类中重写了该方法那么父类类型的引用将会调用子类中的这个方法


在Lua中require 相当于C#中的Using 引入命名空间类似,引入方式:

首先从当前运行目录中找引入的脚本。

如果没有找到就从Lua环境变量中招需要引入的脚本。

从其他环境变量Path中找。

在使用Lua的时候可以这样表示父类,子类继承,实现多态的性质。

多态:父类的指针指向子类,调用子类的方法


父类,Parent
Parent = {testOne =  35}

Parent.__index = Parent

function Parent.new()

local self = {}

--把Parent背包放在self身上

setmetatable(self,Parent);

return self

end

function Parent:TestThree( ... )

print("Parent coming")

end

function Parent:TestTwo( ... )

self:TestThree()

end

子类,Son

 

require "Parent"

 

Son = Parent.new()

 

function Son:TestThree( ... )

-- body

print("Son Coming")

end

Son:TestTwo()

在这个子类脚本里面,运行步骤:

require引用了父类脚本"Parent"。

Son继承父类——获得Parent.new的返回值。

Son声明了一个跟父类同样名字的方法TestThree,但是输出打印是不同的。