Tengo tres clases, una SuperClass, una SubClass y una clase de prueba. La SuperClase es abstracta, y la SubClase extiende la SuperClase, la clase de prueba no tiene relación con ninguna de ellas. Asi que
public abstract class SuperClass {...} public class SubClass extends SuperClass {...} public class TesterClass {...}Tanto SuperClass como SubClass tienen un método toString(), por lo que se parece más a
public abstract class SuperClass { public String toString(){...}; ... } public class SubClass extends SuperClass { public String toString(){...}; ... } public class TesterClass {...}Lo que debo hacer es usar el método toString() de SuperClass dentro de la clase de prueba. Intenté convertir y objetar de SubClass a SuperClass y usar el método desde allí, pero termina usando el método toString() de SubClass. (Y después de que intenté usar un poco de reflexión para ver qué clase Java pensó que era el objeto, parece que pensó que todavía era la Subclase incluso después del lanzamiento). He pensado en tratar de usar la reflexión para obtener directamente el método que quiero de SuperClass y luego llamar al objeto usando invocar (), pero parece una solución realmente complicada.
Cualquier ayuda sería de gran ayuda, incluso si solo me indica un concepto del que aún no he oído hablar. ¡Gracias!
Dentro de la clase TesterClass , puede crear una clase que amplíe la SuperClass abstracta, luego prueba toString de esa subclase. Dado que no anuló el toString de esa subclase, cuando llame a su toString , en realidad estará probando el toString de la superclase ( es decir, SuperClass )
Alternativamente, puede en su método de prueba 1) crear una clase anónima interna de tipo SuperClass ; 2) implementar sus métodos abstractos ( es decir, simplemente ignorarlos porque no se probarán). 3) prueba el toString de la clase anónima interna:
public class TesterClass { void test_super_class_to_String(){ SuperClass myApp = new SuperClass() { @Override void do_something() {} }; String str = myApp.toString(); // assert str == .... } } para una SuperClass que se parece a la siguiente
public abstract class SuperClass { abstract void do_something(); public String toString(){ return ...;} }