在Ruby中,为什么我的基类只放一次?

use*_*377 0 ruby inheritance class

我很高兴知道为什么"Cat"下面的实例也没有将"This animal can:"文本放在其特定的实例属性之前.我期待这样的输出:

This animal can:
Say it's name: 'Rover'
Bark
This animal can:
Say its name: 'Satan'
Meow
Run Code Online (Sandbox Code Playgroud)

这是代码:

class Animal
    puts "This animal can:"
end

class Dog < Animal
    def initialize(name)
        @name = name
        puts "Say its @name: '%s'" % [name]
    end
    def bark
        puts "Bark"
    end
end

class Cat < Animal
    def initialize(name)
        @name = name
        puts "Say its @name: '%s'" % [name]
    end
    def meow
        puts "Meow"
    end
end

rover = Dog.new("Rover").bark
satan = Cat.new("Satan").meow
Run Code Online (Sandbox Code Playgroud)

我所看到的是这个:

This animal can:
Say it's name: 'Rover'
Bark
Say its name: 'Satan'
Meow
Run Code Online (Sandbox Code Playgroud)

是不是"cat"也继承了Animal班级?它的输出也不应该以"This animal can:"

Den*_*rdy 5

您的代码中的问题是:

puts "This animal can:"
Run Code Online (Sandbox Code Playgroud)

在定义Animal类时运行.看起来你想在初始化器中使用它:

class Animal
  def initialize(name)
    puts "This animal can:"
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,您需要super在其他初始化程序中调用您期望的结果.