繼承是一個基礎的物件導向流程的功能,可以讓你建立一個類別是特殊且特別的。舉個例子:
Food -> Fruit -> Orange
這是一個類別的關係鏈,我們可以說橘子是一個水果,水果也是食物。
水果是橘子的父層類別,在 ruby 就會像這樣:
class Food
end
class Fruit < Food
end
class Orange < Fruit
end
每一個方法跟實體定義在食物類別裡,水果類別都可以用得到橘子也是。
你可以想像建立一個物件階層後,你自我感覺程式碼都有整理好,但其實不是這樣子,“繼承”是用於建立一個特定且專業化的類別。例如:
所有的水果都有一個顏色,重量跟名字。有些水果會有特殊的特徵是跟其他水果不一樣的,所以你建立一個新的類別”遺傳“給有這些特徵的水果並且在這個新的類別裡面增加那些特徵。
跟為你個 ruby 開發人員你知道你每天都在使用繼承嗎?
ruby 自己使用了繼承去開啟方法,例如:
puts
class
super
這是因為所有的 ruby 物件預設都會繼承 Object 這個類別,所以你可以建立一個類別像是:
class Apple
end
那他的父層類別就是 Object:
Apple.superclass
# Object
這就是因為為什麼你可以使用那些你還沒定義過的方法,因為都是繼承過來的。例如,當你呼叫 puts, ruby 會先在你的類別裡面找看看有沒有這個方法,ruby 會往他的父層找。一但找不到,他會再找一次,最後才會去找 method_missing 之後給你一個 NoMethodError 或 NameError。
例子:
class ApplicationController < ActionController::Base
end
class SessionsController < ApplicationController
end
Model:
class Comment < ApplicationRecord
belongs_to :article
end