lua简单实现面向对象

复制代码
--父类
local Person = 
{
    name = "XX"
    ,
    age = 0
    ,
    PrintName = function(self)
        print("PersonName : "..self.name)
    end
    ,
    new = function(self,name,age)
        obj = {}
        --创建并赋值实例的字段
        obj.name = name
        obj.age = age
        setmetatable(obj , {__index = self})
        return obj
    end
    ,
    PrintAge = function(self)
        print(self.name.."age"..self.age);
    end
}
--子类
local Student = 
{
    PrintName = function(self)
        print("StudentName : "..self.name)
    end
    ,
    new = function(self,name,age)
        obj = {}
        setmetatable(obj , {__index = self})
        --创建并赋值实例的字段
        obj.name = name;
        obj.age = age
        return obj
    end
}

setmetatable(Student , {__index = Person}) 
--Student.__newindex = Person

local zhangsan = Student:new("zhangsan",20)
local lisi = Person:new("lisi",25)

zhangsan:PrintName()
lisi:PrintName()
--用的是父类的方法,但使用的数据是zhangsan的name和age(用self传过去的),字段无法实现继承,需要每个实例都创建
zhangsan:PrintAge() 
lisi:PrintAge() 
复制代码

 

posted @   mc宇少  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示