考虑下面的代码:为什么重写已经实现的抽象类型是不可能的?
class A {
class B
type C <: B
trait D
}
class E extends A {
type C = B
}
class F extends E {
override type C = B with D
}
为什么在Eclipse IDE英迪格内的Scala IDE的介绍编译器错误消息在E级,相当于F.this.B 压倒一切的C类抱怨; C型有不兼容型?
毕竟所有的类“B”只是用特征“D”进行“修改”,因此这两个类型定义具有相同的基本类型,即“B”。因此兼容的类型定义。
下面的代码作品。我考虑的类型分配类同变量赋值的规则,如:
class Foo
trait Bar
val a: Foo = new Foo
val fooWithBar: Foo = new Foo with Bar
我的理解是错误的?
Foo with Bar是Foo的子类型。这不是问题所在。不允许在修复类型成员时重新定义类型成员,即使是子类型也是如此。如果您将Bar添加到Foo中,则无法重新定义从Foo到Bar的类型成员。 – 2012-01-07 18:16:13