lua-面向對象

--面向對象
--lua中類可以通過table【屬性】+function【方法】+metetable【繼承,不推薦用,只模擬最基本的對象大部分時間夠用了】模擬實現

--基類
Shape = {area = 0}

--基類方法 new
function Shape:new(o,side)
  o=o or {}
  setmetatable(o,self)
  self.__index = self  
  side = side or 0
  self.area = side*side  
  return o
end


--基類方法 printArea
function Shape:printArea()
   print("Area== ",self.area)
end


--創建對象
Shape1 = Shape:new(nil,5)
--屬性訪問,使用點號
print("Area=",Shape1.area)
--函數調用,使用冒號
Shape1:printArea()

print()

--繼承:指一個對象直接使用另一對象的屬性和方法。可用於擴展基礎類的屬性和方法。

--繼承實例1-正方形
Square = Shape:new()

--派生類方法new
function Square:new(o,side)
  o= o or Shape:new(o,side)
  setmetatable(o,self)
  self.__index = self  
  return o
end

--派生類方法 printArea重寫
function Square:printArea()
  print("Square Area =",self.area)
end

Square1 = Square:new(nil,6)
Square1:printArea()

print()

--繼承實例2-矩形
Rectangle = Shape:new()

--派生方法 new
function Rectangle:new(o,width,height)
   o = o or Shape:new(o)
   setmetatable(o,self)
   self.__index = self
   self.area = width * height
   
   return o
end

--派生類方法printArea()重寫
function Rectangle:printArea()
  print("Rectangle Area =",self.area)
end

Rectangle1 = Rectangle:new(nil,4,7)
Rectangle1:printArea()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章