-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathluaClass.lua
More file actions
64 lines (54 loc) · 1.8 KB
/
luaClass.lua
File metadata and controls
64 lines (54 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Father={}
Father.numBer = 0 --类属性,所有对象共享 调用用类名:Role.numBer
--lua提供了一种更为便利的语法,即将点(.)替换为冒号(:),这样可以在定义和调用函数时隐藏参数。
function Father:new(name) --Father.new(self,name)
self.name = name
self.lovenumber = 0
self.__index=self
Father.numBer = Father.numBer + 1
opt = {}
--将新对象实例的元表指向Father,这样就可以以Father为模板了
setmetatable(opt,self)
--将Father的__index字段指向自己,以便新对象在找不到指定的key时可以被重定向,即访问Father拥有的key
return opt
end
function Father:toString()
print("I love my son!"..self.name)
end
function Father:Loving(v)
self.lovenumber=self.lovenumber+v
return self.lovenumber
end
local f1=Father:new("jianjian")
print(f1:toString())
print(f1:Loving(100))
print(f1.name.."Father.numBer"..Father.numBer)
local f2=Father:new("baba")
print(f2:toString())
print(f2:Loving(200))
print(f1.name.."Father.numBer"..Father.numBer)
--单例
function Father:Instance()
if self.instance == nil then
self.instance = self:new()
end
return self.instance
end
local s1 = Father:Instance()
local s2 = Father:Instance()
if s1 == s2 then
print("两个对象是相同的实例")
end
--下面派生出Father的一个子类,此时的Son仍为Father的一个对象实例
Son=Father:new()
--重写Father中的toString方法,以实现自定义功能
function Son:toString()
print("I love myself!")
end
--在执行下面的new方法时,table s的元表已经是Son了,而不是Father
s=Son:new()
print(s:toString()) --先在子类Son中找到该方法
print(s:Loving(50)) --子类中无该方法,则调用父类中该方法
--输出答案
--I love myself!
--50