亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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回調,并返回操作的類名。