Ruby類變量如何實(shí)現(xiàn)繼承

小樊
81
2024-11-02 09:49:21

在Ruby中,類變量不是繼承的。類變量是在類定義中聲明的變量,它們屬于類本身而不是類的實(shí)例。當(dāng)一個(gè)類繼承另一個(gè)類時(shí),子類會(huì)繼承父類的類變量,但這些變量與實(shí)例變量不同,它們不會(huì)被子類的實(shí)例共享。

如果你想要在子類中修改父類的類變量,你可以使用superclass方法來(lái)訪問(wèn)父類,并直接修改父類的類變量。這里有一個(gè)例子:

class Parent
  @@class_variable = "I am a class variable in Parent"
end

class Child < Parent
  def modify_parent_class_variable
    Parent.class_eval do
      @@class_variable = "I am a modified class variable in Parent"
    end
  end
end

child = Child.new
puts child.class_variable # 輸出 "I am a modified class variable in Parent"

在這個(gè)例子中,我們首先定義了一個(gè)名為Parent的類,其中包含一個(gè)類變量@@class_variable。然后,我們創(chuàng)建了一個(gè)名為Child的子類,它繼承了Parent類。在Child類中,我們定義了一個(gè)名為modify_parent_class_variable的方法,該方法使用Parent.class_eval來(lái)修改父類的類變量。當(dāng)我們創(chuàng)建一個(gè)Child類的實(shí)例并調(diào)用modify_parent_class_variable方法時(shí),我們可以看到父類的類變量已經(jīng)被修改。

0