Seguinte, não consigo entender o resultado do código abaixo:
class A {
int x = 5;
}
class B extends A {
int x = 6;
}
public class CovariantReturnTest {
public A getObject() {
return new A();
}
}
class SubCovariantReturnTest extends CovariantReturnTest {
public B getObject() {
return new B();
}
public static void main (String[] args) {
CovariantReturnTest c1 = new SubCovariantReturnTest();
System.out.println(c1.getObject().x);
}
}
O resultado é 5, mas por que não 6?
Quando utilizamos retorno covariante o Java não faz a ligação dinâmica?
Como variáveis não são sobreescritas, quando vc retorna a referencia B para uma instância A, a JVM pega a variavel da instancia (A) e não do corrente objeto (B)
Tente esse código para ficar mais claro:
class A{
public int x = 10;
}
class B extends A{
public int x = 200;
}
class Test{
public static void main(String[] args){
A a = new B();
System.out.println(a.x);
}
}
putzzzzz, é verdade, agora eu entendi. É que a maneira como o código foi escrito que leva a dúvida hehehe. Essas questões de certificação são chatas d+ hehehe.