查看: 2|回复: 0

LUA进阶教程——Lua 面向对象(Table + Metatable 模拟)

[复制链接]

28

主题

68

回帖

1441

积分

金牌会员

积分
1441
QQ
发表于 昨天 15:17 | 显示全部楼层 |阅读模式
最简类实现(: 语法糖)
-- 类
local Person = {}
Person.__index = Person

-- 构造函数
function Person:new(name, age)
    local obj = {name=name, age=age}
    setmetatable(obj, self) -- self 是 Person
    return obj
end

-- 方法
function Person:sayHi()
    print("Hi, I'm "..self.name..", age "..self.age)
end

-- 对象
local p = Person:new("Tom", 20)
p:sayHi() -- Hi, I'm Tom, age 20
继承
-- 子类 Student 继承 Person
local Student = setmetatable({}, {__index=Person})
Student.__index = Student

function Student:new(name, age, score)
    local obj = Person:new(name, age) -- 父类构造
    obj.score = score
    setmetatable(obj, self)
    return obj
end

function Student:showScore()
    print(self.name.." score: "..self.score)
end

local s = Student:new("Alice", 18, 90)
s:sayHi()    -- 继承父类方法
s:showScore()

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表