我有一些基类 A 有一个不能被覆盖的方法。
class A
def dont_override_me
puts 'class A saying, "Thank you for not overriding me!"'
end
end
还有另一个扩展 A 并尝试重写 dont_override_me
方法的 B 类。
class B < A
def dont_override_me
puts 'class B saying, "This is my implementation!"'
end
end
如果我实例化 B 并调用 dont_override_me
,类 B 的实例方法将被调用。
b = B.new
b.dont_override_me # => class B saying, "This is my implementation!"
这是因为 ruby 的特性。可以理解。
但是,如何强制基类方法 dont_override_me
不能被它的派生类覆盖?我在 ruby 的 java 中找不到像 final
这样的关键字。在 C++ 中,可以将基类方法设为非虚方法,以便派生类无法覆盖它们。我如何在 ruby 中实现这一点?
最佳答案
你可以通过 Hook change 事件并将其改回来做到这一点,但对我来说它似乎有点臭:
http://scie.nti.st/2008/9/17/making-methods-immutable-in-ruby
这是定义 Ruby 的那些东西之一,所以反对它似乎有点毫无意义。如果有人重新定义了一些东西,以至于它可怕地崩溃了..那是他们的问题;-)
关于ruby - 如何在 ruby 中使基类方法不可重写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708642/