2011-11-06 6 views

Respuesta

8

No, no puede, porque viola la encapsulación. Estás pasando por alto el comportamiento de tus padres, por lo que C debería extender B, pero estás evitando esto.

Consulte Jon Skeets excelente respuesta a la misma pregunta Why is super.super.method(); not allowed in Java?.

Tenga en cuenta que puede acceder al campo por reflexión, pero no desea hacer eso.

3

No. Y lo dejaría así, pero aparentemente SO quiere que continúe con 30 caracteres.

+11

Si por casualidad usted conoce la razón por la que esto no es posible, que podría ser algo para llenar los 30 caracteres :) Y – arsenbonbon

17

No, pero se puede hacer algo similar con la herencia múltiple rasgo:

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

¿Por qué esto no viola la encapsulación como dijo @Matthew en su respuesta? – MaxNevermind

+1

En este ejemplo, la clase 'C' extiende explícitamente' A', por lo que obtiene acceso directo al comportamiento de 'A'. Para ser sincero, este ejemplo parece extraño, y no estoy seguro de que sea un buen estilo. –

Cuestiones relacionadas