在Ruby中阻止静态函数的继承

Pol*_*ium 2 ruby oop inheritance

一个小测试用例:

class A
  def self.print
    puts "Hello A"
  end
end


class B < A
end

A.print
B.print
Run Code Online (Sandbox Code Playgroud)

这输出:

Hello A
Hello A
Run Code Online (Sandbox Code Playgroud)

我想阻止print定义的函数的继承class A.可能吗?

需要输出:

Hello A
`<main>': undefined method `print' for B:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

我发现private_class_method但是因为它失败了,所以我找不到它A.print.

Pat*_*ity 5

class A
  def self.print
    puts "Hello A"
  end

  def self.inherited(klass)
    class << klass
      undef :print
    end
  end
end

class B < A
end

A.print
# Hello A

B.print
# private method `print' called for B:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)