2011-09-23 16 views
21

Mam cechę, która jest realizowana z innych cech. Każda z tych cech przesłonić zachowanie supertrait i są mieszane w do klasy:Jak uzyskać dostęp do jednej z wielu cech nadklasy?

trait T { 
    def name = "t" 
} 
trait T1 extends T { 
    abstract override def name = "t1" 
} 
trait T2 extends T { 
    abstract override def name = "t2" 
} 
class C extends T with T1 with T2 { 
    def printName = super.name 
} 

Teraz, w klasie C Chcę uzyskać dostęp zachowanie nie ostatniej cechy mieszane-w ale zachowanie jednego tych cech. czy to możliwe?

Odpowiedz

26

Możliwe jest specjalizują się super-wezwanie do konkretnej cechy:

class C extends T with T1 with T2 { 
    def printName = super[T1].name 
} 
+10

Jest to możliwe tylko wtedy, gdy 'T1' powyżej jest bezpośrednim Super cecha. – axel22

+2

+1, święty dym, nigdy nie wiedziałem o tej funkcji! – missingfaktor

+0

Pytanie i odpowiedź, obie przez tę samą osobę? – Nawaz

Powiązane problemy