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 № 1Con una variable de referencia de tipo A
, no puedes llamar getS()
, porque podría ser cualquier tipo que implemente A
decir 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 A
y 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.