Ruby 的inherit 和 inherited
眾所周知,繼承是面向對象語言的重要概念,Ruby作為一門面向對象的編程語言,也提供了繼承的功能,本章節我主要講Ruby是如何繼承的。
1. Ruby中如何繼承
Ruby通過 子類 < 基/父類 這種形式來實現繼承。
實例:
class Person
def name
"My name is Andrew"
end
end
class Member < Person
end
puts Member.new.name
# ---- 輸出結果 ----
My name is Andrew
解釋:上面的例子中,類Member
繼承了類Person
,所以Member
增加了名為name
的實例方法。
繼承不光可以繼承實例方法,同樣也可以繼承類方法。
實例:
class Person
def self.say_hello
"Hello"
end
def name
"My name is Andrew"
end
end
class Member < Person
end
puts Member.say_hello
# ---- 輸出結果 ----
Hello
Tips:在Ruby中每個類只能繼承一次,不能多重繼承。不過我們可以通過混入的方式,將模塊中的方法混入進類中,從而達到多重繼承的效果。
注意事項:我們所指的多重繼承是這樣的形式:
class A inherits class B
class A inherits class C
而不是:
class A inherits class B
class B inherits class C
當繼承的類中所含的方法和自身方法名相同的時候,保留自身的方法,忽略繼承的方法。
實例:
class Person
def name
"My name is Person"
end
end
class Member < Person
def name
"My name is Member"
end
end
puts Member.new.name
# ---- 輸出結果 ----
My name is Member
2. inherited
當一個類被繼承的時候,會觸發inherited
鉤子方法,相當于被繼承時的通知。
實例:
class Person
def self.inherited(klass)
puts "#{klass} inherited #{self}"
end
def name
"My name is Andrew"
end
end
class Member < Person
end
puts Member.new.name
# ---- 輸出結果 ----
Member inherited Person
My name is Andrew
解釋:當類Person
被繼承后,觸發了inherited
鉤子方法,打印了“Member inherited Person”。
3. 小結
本章節我們學習了繼承,繼承使用<
符號,當類繼承一個類的時候,會將繼承的類中的實例方法和類方法都移植過來。一個類只能繼承一個類。當繼承的類中所含的方法和自身方法名相同的時候,保留自身的方法,忽略繼承的方法。另外,當一個類被繼承的時候,會觸發inherited
回調,并返回操作的類名。