zoukankan      html  css  js  c++  java
  • Lua学习笔记5:类及继承的实现

    -- Lua中类的实现


    -------------------------------- 基类 ----------------------------
    classBase = {x = 0,y = 0} -- x,y为类的成员变量
    classBase.__index = classBase -- 这句是重定义元表的索引,必需要有


    --模拟构造体,一般名称为new()
    function classBase:new(x,y)
            local self = {}     -- 初始化对象自身
            setmetatable(self, classBase) -- 必需要有
            self.x = x
            self.y = y
            return self
    end


    function classBase:show() -- 类的成员函数
        print(self.x,self.y)
    end


    -- 基类測试代码
    objA = classBase:new(1,2) -- 调用构成函数创建类对象
    objA:show() -- 调用类方法
    print(objA.x,objA.y) -- 訪问类的成员变量


    -- # lua提供了用冒号的方式在一个方法定义中加入一个额外的參数self,
    -- # 这样调用bjA.show()会报错。self为nil
    -- # print(objA:x,objA:y)错误的


    -------------------------------- 继承:派生类 ----------------------------
    classDerived = {z=0} -- 添加成员变量
    setmetatable(classDerived, classBase) -- 设置类型为classBase
    classDerived.__index = classDerived -- 和类定义一样,索引值表示自身


    -- 构造函数
    function classDerived:new(x,y,z)
         local self = {}
         self = classBase:new(x,y) --将对象自身设定为父类。相当于调用父类的构造函数
         setmetatable(self, classDerived) -- 将对象自身元表设定为classDerived
         self.z = z --新的属性初始化,假设没有将会依照声明=0


         return self
    end


    -- 重写父类方法
    function classDerived:show()
         print(self.x, self.y, self.z)
    end


    -- 添加方法
    function classDerived:showSum()
         print(self.x + self.y + self.z)
    end


    -- 派生类測试代码
    objB = classDerived:new(1,2,3) -- 调用构成函数创建类对象
    objB:show() -- 调用重写的方法,体现了多态
    objB:showSum() -- 调用新加的方法
  • 相关阅读:
    Linux find 用法示例
    [转载]进程的概念与结构
    linux vi命令详解
    vi快捷键必知必会
    vim分屏操作
    硬连接和软连接的区别
    javascript_console调试常用方法
    javascript_错误处理机制
    Array详解
    react--setState使用
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5238909.html
Copyright © 2011-2022 走看看