我有一些基类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
通过派生类强制基类方法不可覆盖?我找不到类似final
java for ruby 的关键字.在C++中,基类方法可以是非虚拟的,这样它们就不会被派生类覆盖.我如何在ruby中实现这一目标?
您可以通过挂钩更改事件并将其更改回来来实现,但对我来说似乎有点臭:
http://scie.nti.st/2008/9/17/making-methods-immutable-in-ruby
这是那些定义Ruby的东西之一,因此与它作斗争似乎有点毫无意义.如果某人重新定义了某些东西,那么它就会破碎......这就是他们的问题;-)