0

私はそれがおそらくロングショットであることを知っていますが、私は尋ねたいと思いました:

Ruby は、継承するクラスのメソッドinitializeを明示的に呼び出さない限り (または継承するクラスでオーバーロードしない限り)、親クラスのメソッドを実行しないため、コードをクラスの一部として実行する別の方法があるかどうか疑問に思っていました。継承クラスの新しいインスタンスをインスタンス化するときの親コンテキスト(おそらくフック)...superinitialize

の初期化メソッドを実装する場合B、現在の動作は次のとおりです。

class A
    def initialize
        puts "Inside A's constructor"
    end
end

class B < A
    def initialize
        puts "Inside B's constructor"
    end
end

A.new
B.new

# Output
# => Inside A's constructor
# => Inside B's constructor

出力がどういうわけか次のようになるのではないかと思っていました:

A.new
# => Inside A's constructor
B.new
# => Inside A's constructor
# => Inside B's constructor
4

2 に答える 2

0

もちろんsuper、サブクラスの初期化メソッドを呼び出すだけです。

class A
  def initialize
    puts "Inside A's constructor"
  end
end

class B < A
  def initialize
    super
    puts "Inside B's constructor"
  end
end

A.new
B.new

出力:

Inside A's constructor
Inside A's constructor
Inside B's constructor
于 2013-04-29T20:05:55.483 に答える
0
class A
    def initialize
        puts "Inside A's constructor"
    end
end

class B < A
    def initialize
        super
        puts "Inside B's constructor"
    end
end

A.new
B.new

出力:

Inside A's constructor
Inside A's constructor
Inside B's constructor
于 2013-04-29T19:52:35.277 に答える