/ / Anulación e interfaces de métodos estáticos de Java: Java, métodos, estática, anulación

Supresión de métodos estáticos de Java e interfaces: Java, métodos, estáticos, anulación

Tengo una interfaz A con un método getT(), abstract B class con metodo getS() y class C que se extiende B class cual implements A interface. Estoy anulando métodos de A interfaz y B superclase dentro del C subclase Luego en el main método instanciaré el C clase para ser typeo si A Me gusta esto: A obj = new C(); "Puedo llamar al getT() de obj, pero no se puede llamar getS() método. Como puedo llamar getS() método de obj, pero no puedo cambiar el tipo de obj, tiene que ser A. Aquí está el código:

Interfaz A:

public interface A {
public String getT();
}

Resumen clase B:

public abstract class B implements A {
public abstract String getS();
}

subclase C:

public class C extends B {

@Override
public String getT() {
System.out.println("method getT() from C class");
return null;
}

@Override
public String getS() {
return null;
}

}

Y el método principal dentro de la clase T:

public class T {

public static void main(String[] args) {
A obj = new C();
obj.getT();
}

}

Respuestas

1 para la respuesta № 1

Con una variable de referencia de tipo A, no puedes llamar getS(), porque podría ser cualquier tipo que implemente Adecir AImplementer, eso no se extiende desde B. Ninguna A el objeto no necesariamente tiene un getS() método. Solo se garantiza tener un getT() método.

Si obj tiene que ser un tipo A y necesitas llamar getS(), entonces incluye el getS() método en la definición de la A interfaz:

public interface A {
public String getT();
public String getS(); // Add this line.
}

Entonces B sigue siendo un Ay puedes llamar getS() en una A variable de referencia.

Por cierto, no veo ninguna static métodos en su código. Los métodos estáticos no se pueden anular.


1 para la respuesta № 2

Para obtener acceso al método, deberá bajar el obj a B.

Entonces podrías tener:

((B)obj).getS();

Downcasting: http://www.programmerinterview.com/index.php/java-questions/downcasting-in-java/


0 para la respuesta № 3

la clase de tipo de obj es A, pero A no tiene "método getS (), por lo que no puede llamar al método principal. obj debe ser de clase B o clase C.