当继承的类部件初始化时,Ruby执行代码

时间:2013-04-29 19:51:06

标签: ruby oop inheritance

我知道这可能是一个很长的镜头,但我想我会问:

由于Ruby不执行父类的initialize方法,除非您在继承类的super方法中显式调用initialize(或者除非在继承中不重载它)我想知道在实例化一个继承类的新实例时是否有其他方法可以执行代码作为父上下文的一部分(可能是一个钩子)...

在实现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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当然,您可以在子类initialize方法

中调用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