第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Ruby 的inherit 和 inherited

眾所周知,繼承是面向?qū)ο笳Z(yǔ)言的重要概念,Ruby作為一門面向?qū)ο蟮木幊陶Z(yǔ)言,也提供了繼承的功能,本章節(jié)我主要講Ruby是如何繼承的。

1. Ruby中如何繼承

Ruby通過(guò) 子類 < 基/父類 這種形式來(lái)實(shí)現(xiàn)繼承。

實(shí)例:

class Person
  def name
    "My name is Andrew"
  end
end

class Member < Person
end

puts Member.new.name

# ---- 輸出結(jié)果 ----
My name is Andrew

解釋:上面的例子中,類Member繼承了類Person,所以Member增加了名為name的實(shí)例方法。

繼承不光可以繼承實(shí)例方法,同樣也可以繼承類方法。

實(shí)例:

class Person
  def self.say_hello
    "Hello"
  end
  
  def name
    "My name is Andrew"
  end
end

class Member < Person
end

puts Member.say_hello

# ---- 輸出結(jié)果 ----
Hello

Tips:在Ruby中每個(gè)類只能繼承一次,不能多重繼承。不過(guò)我們可以通過(guò)混入的方式,將模塊中的方法混入進(jìn)類中,從而達(dá)到多重繼承的效果。

注意事項(xiàng):我們所指的多重繼承是這樣的形式:

class A inherits class B
class A inherits class C

而不是:

class A inherits class B
class B inherits class C

當(dāng)繼承的類中所含的方法和自身方法名相同的時(shí)候,保留自身的方法,忽略繼承的方法。

實(shí)例:

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

# ---- 輸出結(jié)果 ----
My name is Member

2. inherited

當(dāng)一個(gè)類被繼承的時(shí)候,會(huì)觸發(fā)inherited鉤子方法,相當(dāng)于被繼承時(shí)的通知。

實(shí)例:

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

# ---- 輸出結(jié)果 ----
Member inherited Person
My name is Andrew

解釋:當(dāng)類Person被繼承后,觸發(fā)了inherited鉤子方法,打印了“Member inherited Person”。

3. 小結(jié)

本章節(jié)我們學(xué)習(xí)了繼承,繼承使用<符號(hào),當(dāng)類繼承一個(gè)類的時(shí)候,會(huì)將繼承的類中的實(shí)例方法和類方法都移植過(guò)來(lái)。一個(gè)類只能繼承一個(gè)類。當(dāng)繼承的類中所含的方法和自身方法名相同的時(shí)候,保留自身的方法,忽略繼承的方法。另外,當(dāng)一個(gè)類被繼承的時(shí)候,會(huì)觸發(fā)inherited回調(diào),并返回操作的類名。