覆盖父级的单例方法

时间:2019-03-06 17:22:44

标签: ruby

在C#中,常规类不能从静态类继承。 Ruby的类似情况似乎是:

class Foo
  class << self
    def test
      "this is test"
    end
  end
end

class Bar < Foo
  def test
    puts super
  end
end

Bar.new.test # >> error

常规类Bar是否可以从Foo继承并覆盖test

1 个答案:

答案 0 :(得分:1)

  

Bar是否可以从Foo继承

您已经正确完成了该部分

  

并覆盖test

您需要将Bar.test定义为类方法,但是您编写的是实例方法定义(和调用)。试试

class Bar < Foo
  class << self
    def test
      super + ", man"
    end
  end
end

Bar.test
#=> "this is a test, man"

Ruby中没有诸如静态类或方法之类的东西,因此实例方法调用Bar.new.test永远不会像类方法调用Bar.test那样指代相同的东西。静态方法的概念。