Chi*_*tan 3 ruby oop overriding
我有一些基类A,其方法不能被覆盖.
class A
def dont_override_me
puts 'class A saying, "Thank you for not overriding me!"'
end
end
Run Code Online (Sandbox Code Playgroud)
另一个扩展A并尝试覆盖该dont_override_me方法的B类.
class B < A
def dont_override_me
puts 'class B saying, "This is my implementation!"'
end
end
Run Code Online (Sandbox Code Playgroud)
如果我实例化B并调用dont_override_me,将调用B 类的实例方法.
b = B.new
b.dont_override_me # => class B saying, "This is my implementation!"
Run Code Online (Sandbox Code Playgroud)
这是因为ruby的属性.可以理解的.
但是,如何dont_override_me通过派生类强制基类方法不可覆盖?我找不到类似finaljava for ruby 的关键字.在C++中,基类方法可以是非虚拟的,这样它们就不会被派生类覆盖.我如何在ruby中实现这一目标?
您可以通过挂钩更改事件并将其更改回来来实现,但对我来说似乎有点臭:
http://scie.nti.st/2008/9/17/making-methods-immutable-in-ruby
这是那些定义Ruby的东西之一,因此与它作斗争似乎有点毫无意义.如果某人重新定义了某些东西,那么它就会破碎......这就是他们的问题;-)
| 归档时间: |
|
| 查看次数: |
3915 次 |
| 最近记录: |