Учитывая следующий код:
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
}
Почему компилятор представления Scala IDE в Eclipse Indigo IDE жалуется на сообщение об ошибке , переопределяющее тип C в классе E, что равно F.this.B; тип C имеет несовместимый тип ?
Ведь класс «B» только «изменен» с помощью признака «D», и, таким образом, два определения типа относятся к одному и тому же базовому типу, которым является «B». Следовательно, определения совместимых типов.
Приведенный ниже код работает . Я считаю правила присвоения типа аналогичными назначению переменных, например:
class Foo
trait Bar
val a: Foo = new Foo
val fooWithBar: Foo = new Foo with Bar
Я неправильно понимаю?