Inheritance, Subclass, and Superclasses

Ruby ทำได้แค่ single inheritance ทุก class จะมีแม่เพียง class เดียว ถ้าไม่มีการระบุทุก class จะเป็นลูกของ class Object

วิธีการกำหนด superclass

class InterestBearingAccount < BankAccount
  def initialize(owner, rate)
    @owner = owner
    @balance = 0
    @rate = rate
  end
 
  def deposit_interest
    @balance += @rate * @balance
  end
end

InterestBearingAccount เป็น class ลูกของ BankAccount ดังนั้นจึงได้คุณสมบัติ (method) ทั้งหมดของ BankAccount มาใช้

ถ้าเราต้องการยกเรื่องการกำหนด @balance และ @owner ให้กับ class แม่ เราสามารถกำหนดได้ดังนี้

  def initialize(owner, rate)
    super(owner)
    @rate = rate
  end

คำสั่ง super จะ ค้นหา method ที่มีชื่อเหมือนกันใน class แม่ แล้วเรียก method นั้น ในตัวอย่างคำสั่ง super(owner) จะค้นหา method ที่ชื่อ initialize ใน class แม่ พร้อมเรียกและส่งตัวแปร owner ไปให้ ในกรณีที่ไม่เจอ ruby จะดูต่อไปที่ class แม่ของแม่ต่อๆ ไป ถ้าไม่เจอจึงแสดง error ออกมา

สิ่งนี้ต่างจากภาษาอื่นๆ เราต้องระวังไว้ว่า class ลูกจะไม่เคยเรียก initialize ของ class แม่เอง ถ้าเราไม่เรียกให้