zoukankan      html  css  js  c++  java
  • Lua学习笔记(六)

    Lua面向对象

    封装

    -- 元类
    People={isHumen=true}		-- 此处定义的元素都是相当于C++的静态成员变量
    
    -- 基类方法new
    function People:new(o,n,a)
    	o=o or {}
    	setmetatable(o,self)	-- self相当于C++的this指针,但是这里指代的是元类People而不是对象o
    	self.__index=self
    	o.name=n				-- 用self代替o相当于C++中给静态成员变量赋值
    	o.age=a
    	return o
    end
    
    -- 基类元方法__tostring
    function People:__tostring()
    	local sum="名字为:"..self.name.."
    年龄为:"..self.age -- 此处self指代的是实际调用时的对象
    	return sum
    end
    
    -- 基类方法walk
    function People:walk()
        print("我正在走!")
    end
    
    -- 创建对象
    me=People:new(nil,"Jaxes",21)
    
    -- 调用对象中的函数
    print(me)		-- 等价于print(tostring(me))
    me:walk()		-- 等价于me.walk(me)
    

    继承

    -- 类Worker派生自People类
    Worker=People:new()
    
    -- 派生类
    function Worker:new(o,n,a,id)
    	o=o or People:new(o,n,a)
    	setmetatable(o,self)
    	self.__index=self
    	o.id=id
    	return o
    end
    
    function Worker:__tostring()
    	local sum=People.__tostring(self)
    	sum=sum.."
    ID为:"..self.id
    	return sum
    end
    
    worker=Worker:new(nil,"kaka",55,01)
    print(worker)
    worker:walk()		-- 继承自父类函数walk
    

    多态

    这个部分暂时还不清楚怎么搞,暂时做为后续储备内容

  • 相关阅读:
    Asp.net调用百度搜索引擎
    iOS 之 alcatraz (插件管理器)
    @dynamic、@synthesize
    iOS 准备
    iOS 沙盒
    iOS 引导页
    iOS 开发之登陆
    iOS 程序开发
    Java 验证用户名、密码
    数据库操作
  • 原文地址:https://www.cnblogs.com/JaxesZ/p/11217032.html
Copyright © 2011-2022 走看看