2011-03-03 8 views
7

tengo el siguiente,Java una instancia de clase de la cadena

public interface SuperbInterface 
public class A implements SuperbInterface 
public class B extends A 
public class C extends B 

quiero crear una instancia de C pero parece ser cada vez B, lo que hice mal?

Class classz = Class.forName("C"); 
SuperbInterface superb = (SuperbInterface)classz.newInstance(); 

//Here when I debug it seems to be going to B.doWork() methods instead of C.doWork(). 
superb.doWork(); 
+3

has anulado doWork in 'C' ?? por favor muestre el código correspondiente completamente –

+1

muestre su código completo –

Respuesta

5

La única cosa que puedo pensar es que usted no ha anulado DoWork() en C.

Tal vez usted ha tratado de anulación OT pero con algún error de ortografía en el nombre del método o parámetros erróneos ?

+0

Como resulta que hay un contenedor obsoleto en la ruta de compilación, sucede que en este contenedor 'C' aún no ha anulado 'doWork' de' B'. duh! –

0

¿Estás seguro de que C prevalece sobre el método doWork? Con base en la pregunta tal como se plantea, es perfectamente razonable/legal esperar que, como parte de la extensión de B, C no proporcione su propia implementación para doWork y en su lugar se base en la que proporciona la superclase B.

1

Suponiendo que está utilizando una versión más nueva de Java, agregue @Override al método doWork. Si ha anulado incorrectamente el método, el compilador le informará.

0

que ver el resultado:

de un do funciona

qué es lo que están esperando?

Cuestiones relacionadas