Cla*_*diu 5 ruby oop subclass subclassing
假设你写了一个类Sup,我决定将它扩展为Sub< Sup.我不仅需要了解您发布的界面,还需要了解您的私人领域.见证这个失败:
class Sup
def initialize
@privateField = "from sup"
end
def getX
return @privateField
end
end
class Sub < Sup
def initialize
super()
@privateField = "i really hope Sup does not use this field"
end
end
obj = Sub.new
print obj.getX # prints "i really hope Sup does not use this field"
Run Code Online (Sandbox Code Playgroud)
问题是,解决这个问题的正确方法是什么?似乎子类应该能够使用它想要的任何字段而不会弄乱超类.
实例变量与继承无关,它们是在第一次使用时创建的,而不是通过某种定义机制创建的,因此在语言中没有对它们进行特殊的访问控制,并且它们不能被遮蔽.
我不仅需要了解您发布的界面,还需要了解您的私人领域.
实际上这是一个"官方"的立场.摘自"Ruby编程语言"一书(Matz是其中一位作者):
...这是另一个原因,当你熟悉(并控制)超类的实现时,扩展Ruby类是安全的.
如果你不知道它内外都是你自己.伤心但真实.
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |