Die erste Definitionszeile einer Klasse ist ein Konstruktor, so dass sie unabhängig von einer bestimmten Implementierung der Klasse ist (da Sie sie erstellen, können Sie den abstrakten Typ member noch nicht kennen).
Aber was können Sie tun, ist eine Art Parameter Ihrer Klasse geben:
abstract class C[T](c: T) {
}
Damit T
kann im Konstruktor verwendet werden (was nur eine typabhängigen Methode ist, jetzt). Beachten Sie, dass Typ-Parameter und die Mitglieder sind zwei verschiedene Dinge, so dass Sie dies nicht tun können:
val stringC = new C("foo") {} // the {} enables instantiation of abstract classes
val other: stringC.T = "bar"
Wenn Sie stringC.T
Notation verwenden möchten, müssen Sie einen Typ-Member definieren, die zu Ihrem Typ-Parameter gleich ist:
class C[A](c: A) {
type T = A
}
Hauptgrund, warum Sie so nicht tun können, ist, wie Polymorphismus in scala implementiert ist. Antworten auf Ihre Frage decken eine große Anzahl von Bereichen ab, die einige Zeit benötigen, um sie zu erklären. Versuchen Sie, lesen Sie den nächsten Artikel: https://twitter.github.io/scala_school/type-basics.html und grasen Sie Typ Parameter und auch implizit, wenn tieferes Verständnis benötigt. – Pavel