An analog implementation classes and objects
- The role of the role of self keyword and C # among this key is similar, both object that represents the current "class"
- Calling a method with a colon ":"
--初始化表(类)
Person = {name, age}
--模拟构造方法,(可以在该方法中初始化对象字段)
function Person:New()
--初始化一个新表(对象)
local obj = {}
--将当前类作为新表的元表
setmetatable(obj, Person)
--设置索引,使新表能访问到旧表
Person.__index = Person
--当调用New方法时,返回新表(实例化对象)
return obj
end
--模拟一个方法
function Person:Show()
print(self.name, self.age)
end
return Person
--实例化对象
PersonObj = Person.New()
PersonObj.name = "AA"
PersonObj.age = 20
--调用方法用冒号“:”,否则访问不到self
PersonObj:Show()
inherit
Animal = {name}
function Animal:New(name)
local obj = {}
setmetatable(obj,self)
self.__index = self
self.name = name
return obj
end
function Animal:Show()
print("我是动物:" .. self.name)
end
---------继承-----------
--子类继承父类
--(调用New方法,创建新表(类),Bird中的方法才能访问到Animal中的字段)
Bird = Animal:New()
--子类构造方法
function Bird:New(name)
--继承类Animal(调用New方法,创建新表(类),并初始化)
local obj = Animal:New(name)
setmetatable(obj,Bird)
Bird.__index = Bird
return obj
end
function Bird:Eat(food)
print(self.name .. "吃:" .. food)
end
birdObj = Bird:New("鸟")
birdObj:Eat("米")