Почему невозможно переопределить уже реализованный абстрактный тип?

Учитывая следующий код:

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

Я неправильно понимаю?

8
задан Tim Friske 7 January 2012 в 18:03
поделиться