public class A {
public void f1(String str) {
System.out.println("A.f1(String)");
this.f1(1, str);
}
public void f1(int i, String str) {
System.out.println("A.f1(int, String)");
}
}
public class B extends A {
@Override
public void f1(String str) {
System.out.println("B.f1(String)");
super.f1(str);
}
@Override
public void f1(int i, String str) {
System.out.println("B.f1(int, String)");
super.f1(i, str);
}
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.f1("Hello");
}
}
Estoy en busca de que este código de salida:clase base de la función anulada método de clase base
B.f1(String)
A.f1(String)
A.f1(int, String)
Sin embargo, yo estoy consiguiendo:
B.f1(String)
A.f1(String)
B.f1(int, String)
A.f1(int, String)
entiendo que bajo la contexto de B "esto" en A.f1 (Cadena) es la instancia de B. ¿Tengo la opción de hacer la cadena nueva B1(). F1 (Cadena) -> (A) f1 (Cadena) -> (A) f1 (int, Cadena)?
Esta es una pregunta teórica, prácticamente la solución sería, obviamente, en A implementar una función privada que llamarían f1 (String) y f1 (int, String).
Gracias,
Maxim.
Intenté usar la reflexión (obtener un objeto de método para A's f1 (int, String) e invocarlo), pero no funcionó. Esta [entrada de blog] [1] en los blogs de Sun señala que esto no es posible con Java. [1]: http://blogs.sun.com/sundararajan/entry/calling_overriden_superclass_method_on – esaj
@esaj agradable encontrar en el enlace –