2012-05-03 19 views
5

Supongamos que tengo esta interfaz R:"El tipo B no puede ser un superinterfaz de C, un superinterfaz debe ser una interfaz de" error

interface A 
{ 
    void doThis(); 
    String doThat(); 
} 

lo tanto, quiero algunas clases de resúmenes para implementar las doThis método () pero no el doThat() uno:

abstract class B implements A 
{ 
    public void doThis() 
    { 
     System.out.println("do this and then "+ doThat()); 
    } 

} 

abstract class B2 implements A 
{ 
    public void doThis() 
    { 
     System.out.println(doThat() + "and then do this"); 
    } 
} 

hay error viene cuando finalmente decide implementar el método de doThat en una clase regular:

public class C implements B 
{ 
    public String doThat() 
    { 
     return "do that"; 
    } 
} 

Esta clase me lleva al error antes mencionado:

"El tipo B no puede ser un superinterfaz de C; un superinterfaz debe ser una interfaz"

Cualquiera podía ahora si esta jerarquía de clases es válida o debería hacer revés?

+0

Para más detalles, recomiendo mirar las respuestas aquí: http://stackoverflow.com/questions/10839131/implement-vs-extends-when-to-use-whats-the-difference –

Respuesta

19

Debe utilizar extends

public class C extends B 

es importante entender la diferencia entre las palabras clave implements y extends. Por lo tanto, le recomiendo que empiece a leer en esta pregunta: Implements vs extends: When to use? What's the difference? y las respuestas allí.

+1

¡Gracias! También olvidé agregar el resumen público String doThat() a cada clase abstracta: S –

+1

@PainyJames, no es necesario que agregue el 'abstract string String doThat()' a cada una de las clases abstractas. – emory

4

Desde B es una clase, la sintaxis correcta es utilizar extends:

public class C extends B { 
2

B es una clase abstracta y no se puede utilizar con la palabra clave "instrumentos". Tienes que usar "extiende" en su lugar.

Cuestiones relacionadas