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

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



