Scala 面向对象系统与集合库深度解析
1. 成员覆盖规则
在 Scala 中,有一些成员覆盖的规则需要遵循。例如,不能使用 var 覆盖无参数方法,也不能使用方法覆盖 val 或 var 。这是因为它们无法匹配被覆盖对象的行为。
若尝试使用 var 覆盖无参数方法,会出现错误,提示写入方法 override name_= 没有覆盖任何内容。比如,在一个特质中声明了抽象方法 def name: String ,而实现的子类尝试使用 override val name = "foo" ,这相当于要覆盖两个方法:原始方法和 def name_=(…) ,但实际上并不存在后一个方法。
如果可以用方法覆盖 val ,Scala 就无法保证该方法总是返回相同的值,这与 val 的语义不符。
2. 对象层次结构的线性化
2.1 线性化概述
由于单继承的特性,如果忽略混入的特质,继承层次结构将是线性的,一个祖先接着一个祖先。但当考虑特质时,每个特质可能派生自其他特质和类,继承层次结构就形成了有向无环图。线性化指的是将这个图“扁平化”的算法,用于解决方法查找优先级、构造函数调用顺序、 super 的绑定等问题。
2.2 线性化示例
以下是一个简单的线性化示例代
超级会员免费看
订阅专栏 解锁全文
77

被折叠的 条评论
为什么被折叠?



