Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda con test para certificacion

Hola, estoy estudiando para sacar la certificacion 1z0-851 la cosa es que en uno de los test de practica aparece la siguiente pregunta

Given:
1. interface A { public void aMethod(); }
2. interface B { public void bMethod(); }
3. interface C extends A,B { public void cMethod(); }
4. class D implements B {
5. public void bMethod(){}
6. }
7. class E extends D implements C {
8. public void aMethod(){}
9. public void bMethod(){}
10. public void cMethod(){}
11. }

What is the result?
A. Compilation fails because of an error in line 3.
B. Compilation fails because of an error in line 7.
C. Compilation fails because of an error in line 9.
D. If you define D e = new E(), then e.bMethod() invokes the version of bMethod() defined in Line 5
E. If you define D e = (D)(new E()), then e.bMethod() invokes the version of bMethod() defined in
Line 5.
F. If you define D e = (D)(new E()), then e.bMethod() invokes the version of bMethod() defined in
Line 9.

habia contestado que era la E y comprobe esto compilando y ejecutando la clase, la cual me muestra el mensaje de de la implementacion en la clase D, sin embargo el test me dice que la respuesta en F, osea que se ejecuta el metodo sobrescrito en la clase E, busque en diversas web y en todas dice que es la F.

¿alguien entiende porque? porque según se al realizar esto

D e = (D)(new E()),
luego llama al metodo con e.bMethod()

como se realizo casting a "new e" con la llamada poliformica, la instancia e lama a los metodos originales de D y no a los sobrescritos en E
?????????????

mayo 7, 2015 | Registered Commenterfelipefarias

Hola felipefarias.

en el mundo orientado a objeto siempre se ejecutara el método sobre escrito de la clase hijo instanciado, aunque realices un casteo, el casteo sirve como un disfraz es decir con la variable e solo podras ver los metodos de D y B pero sigue siendo un objeto E.

Digamos que un objeto E seria: BDE.. si lo casteas a D solo veras BD,pero como te digo es como un disfraz en realidad sigue siendo E.y ese es el chiste del polimorfismo
tenes diferentes comportamientos con el mismo tipo de variable.
es decir D j=new D(); se comporta diferente a D e=(D) new E(); ..
porque la variable e es En realidad un objeto E que se esta haciendo pasar por un objeto clase D.
bueno espero verme dado a a entender

saludos.

mayo 9, 2015 | Registered Commenterjhosep