一,概述

Lua的类基于表结构。表中存在一个与值无关的标识符self,反应方法的调用者。

二、基础

表中含有self的方法

--类方法的两种声明
c1 = {
    self1 = function(self)
        print(self.value)
    end
}

function c1:self2()
    print(self.value)
end

c1.value = 11
--类方法的两种调用
c1:self1()
c1:self2()

c1.self1(c1)
c1.self2(c1)

三、面向对象的类

Account = {
    balance = 0,
    new = function(self)
        --面向对象的基本写法
        o = {}
        self.__index = self
        setmetatable(o, self)
        return o
    end,
    withdraw = function(self, v)
        self.balance = self.balance - v
    end,
    depesid = function(self, v)
        self.balance = self.balance + v
    end
}

三、封装

Class = {
    new = function(self)
        obj = {}
        local privateValue = 0;
        obj.add = function(self, v)
            privateValue = privateValue + v;
        end
        obj.del = function(self, v)
            privateValue = privateValue - v;
        end
        obj.get = function()
            return privateValue
        end
        self.__index = self;
        setmetatable(obj, self);
        return obj
    end
}

obj = Class:new()
obj:add(100)
obj:add(30)

print(obj.get())

四、继承

setmatetable,可以从元表中查找本表没有的数据

五、多态

最后修改日期: 2023年10月28日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。