2012-08-13 30 views
12

Duplicar posibles:
Why is super.super.method(); not allowed in Java?Java:. Cómo llamar a super() super() en el método reemplazado (método abuelos)

tengo 3 clases que heredan de uno al otro como de la siguiente manera:

A 
↳ 
    B 
    ↳ 
    C 

Dentro de cada clase tengo el siguiente método:

protected void foo() { 
    ... 
} 

Dentro de la clase C Quiero llamar foo de la clase A sin llamar foo en B:

protected void foo() { 
    // This doesn't work, I get the following compile time error: 
    // Constructor call must be the first statement in a constructor 
    super().super().foo(); 
} 

EDITAR Información
un poco de contexto:
Clase B es una clase real que utilizamos. La clase C es una clase de prueba unitaria, tiene algunas modificaciones. El método foo dentro de B hace algunas cosas que no queremos, así que lo reemplazamos dentro de C. Sin embargo, foo en la clase A es útil y necesita ser llamado.

+0

Echa un vistazo a este tema http: // stackoverflow .com/questions/586363/why-is-super-super-method-not-allowed-in-java – Pr0gr4mm3r

Respuesta

7

No es posible en Java. Debería confiar en B que le proporciona una forma explícita de acceder al de A.

14
  • Para llamar a un método en un super clase, se utiliza super.foo(), no super().foo(). super() llama al constructor de la clase principal.
  • No hay forma de llamar al super.super.foo(). Se puede añadir una llamada a super.foo() en la clase B, de modo que llamar super.foo() en C, se llame super.foo() en B que a su vez llamar foo() en A.
Cuestiones relacionadas