2011-11-06 12 views

risposta

8

No, non è possibile, perché viola l'incapsulamento. Stai bypassando il comportamento dei tuoi genitori, quindi C dovrebbe estendere B, ma stai bypassando questo.

Si prega di vedere risposta eccellente Jon Skeets alla stessa domanda Why is super.super.method(); not allowed in Java?.

Si noti che è possibile accedere al campo tramite riflessione, ma non si desidera farlo.

3

No. E vorrei lasciarlo, ma a quanto pare SO vuole che continui per 30 caratteri.

+11

Se vi capita di sapere il motivo per cui questo non è possibile, che potrebbe essere qualcosa per riempire i 30 caratteri :) – arsenbonbon

17

No, ma si può fare qualcosa di simile con molteplici tratto eredità:

trait A { def foo = "from A" } 

class B extends A { override def foo = "from B" } 

class C extends B with A { 
    val b = foo   // "from B" 
    val a = super[A].foo // "from A" 
} 
+0

E perché questo non viola l'incapsulamento come @Matthew ha detto nella sua risposta? – MaxNevermind

+1

In questo esempio, la classe 'C' estende esplicitamente' A', quindi ottiene l'accesso diretto al comportamento di 'A'. Ad essere onesti, questo esempio sembra strano, e non sono sicuro che sia un buon stile. –

Problemi correlati