lua中的面向对象模拟,类、继承、多态

test1.lua

 1 --这里声明了类名,并且给出了属性的初始值
 2 Class = {x=0,y=0}
 3 --这句话是冲定义元表的索引,就是说有了这句,这才是一个类
 4 Class.__index=Class
 5 --构造体
 6 function Class:new(x,y)
 7     local self={}--初始化self,如果没有这句,那么类所建立的对象改变,其他对象都回改变
 8     setmetatable(self,Class)--将self的元表设定为Class
 9     self.x=x--属性初始值
10     self.y=y
11     return self--返回自身
12 end
13 --设定类的其他方法
14 function  Class:test()
15     print(self.x,self.y)
16 end
17 
18 function Class:plus()
19     self.x=self.x+1
20     self.y=self.y+1
21 end
22 
23 function Class:gto()
24     return 100
25 end
26 
27 function Class:gio()
28     return self:gto()*2
29 end

test2.lua

 1 require "test1"
 2 --声明了新的属性Z
 3 Main = {z=0}
 4 --设置类型是Class
 5 setmetatable(Main,Class)
 6 --还是和类定义一样,表索引设定为自身
 7 Main.__index=Main
 8 --这里是构造体,看,加上了一个新的参数
 9 function Main:new(x,y,z)
10     local self={}--初始化对象自身
11     self=Class:new(x,y)--将对象自身设定为父类,这个语句相当于其他语言的super
12     setmetatable(self,Main)--将对象自身元表设定为Main类
13     self.z=z--新的属性初始化,如果没有将会按照声明=0
14     return self
15 end
16 --定义一个新的方法
17 function Main:go()
18     self.x=self.x+10
19 end
20 --重定义父类的方法
21 function Main:test()
22     print(self.x,self.y,self.z)
23 end
24 --重新定义了gto()
25 function Main:gto()
26     return 50
27 end
28 
29 a=Class:new(10,20)
30 print(a:gio())
31 b=Main:new(10,50,200)
32 print(b:gio())
33 print(a:gio())

输出的结果是:

200
100
200

posted @ 2015-01-24 17:36  小翔momo  阅读(423)  评论(0编辑  收藏  举报