Lua --面向对象之多态

来源:互联网 发布:白噪音app 知乎 编辑:程序博客网 时间:2024/05/16 01:52

Lua中的多态和我们平时接触的java,C#中的多态还是有些相似的
只不过看起来没有我们接触的java和C#的代码看起来紧凑,整齐,下面是根据上一个案例进行改写的多态。

--多态-- Meta classShape = {area = 0}-- 基础类方法 newfunction Shape:new (o)  o = o or {}  setmetatable(o, self)  self.__index = self  return oendfunction Shape:getArea()  self.area = 0;end-- 基础类方法 printAreafunction Shape:printArea ()  print("面积为 ",self.area)endSquare = Shape:new()-- Derived class method newfunction Square:new (o,side)  o = o or Shape:new(o,side)  setmetatable(o, self)  self.__index = self  self.side = side or 0  return oend--重载function Shape:getArea()  self.area = self.side * self.side;endfunction Shape:getArea(side)  self.area = side * side;endmySquare = Square:new()mySquare:getArea(200)mySquare:printArea()Rectangle = Shape:new()-- Derived class method newfunction Rectangle:new (o,length,breadth)  o = o or Shape:new(o,side)  setmetatable(o, self)  self.__index = self  self.length = length or 0  self.breadth = breadth or 0  self.area = length*breadth;  return oend--重写基类的方法function Rectangle:getArea()  self.area = self.length*self.breadth;end--和上一个求面积的方法形成多态function Rectangle:getArea(length,breadth)  self.area = length* breadth;endmyRectangle = Rectangle:new(nil,20,30)myRectangle:getArea(30,40)myRectangle:printArea()
0 0
原创粉丝点击