本文调用父类方法有三种方式:
-
self.super:function()
-
self.super.function()
-
local parentClass = ParentClass
parentClass.function(self)
其中第3种方式是最正确的方式,其他两种方式都有问题,接下来讲解前面两种调用方式的问题。
前提:lua中的两种函数调用方式:lua中用.调用方法的方式是正常的函数调用,而用:调用方法,会默认将调用该方法的table,作为方法的第一个参数传入
也就是self;在定义方法时使用:,方法会默认有一个self的参数传入。
设: 使用此方式的类为:该类 该类的父类为:父类 此字段对应的方法为:该方法
当该类实例调用该方法时,由于字段使用的是: 调用的方式,导致传入的self为父类,所以在该方法
中自然不能取到该类实例的属性。
设: 使用此方式的类为:该类 该类的父类为:父类 该类的子类为:子类 此字段对应的方法为:该方法
当子类实例调用该方法时(子类没有重写该方法),该类中的self为子类,self.super即为该类,从而造成了递归调用该方法。



