Me deparei com esta questão no TestKiller e não consegui entender o que aconteceu pra dar o valor 3.
Given
public class Foo {
public int a;
public Foo() {
a = 3;
}
public void addFive() {
a += 5;
}
}
and
public class Bar extends Foo {
public int a;
public Bar() {
a = 8;
}
public void addFive() {
a += 5;
}
}
invoked with:
Foo foo = new Bar();
foo.addFive();
System.out.println("Value: " + foo.a);
What is the result?
A. Value: 3 (Correta)
B. Value: 8
C. Value: 13
D. Compilation fails.
Não entendi o que ocorreu.
Quanto a sequencia de ordem dos construtores eu entendi.
primeiro executa o construtor de Foo e depois de bar ( Pois é dado new Bar() ).
E em cada um é feito uma atribuição. a=3 e a = 8;
Porque após dar o new o valor de foo.bar é 3 ?(antes mesmo de chamar addFive )
É porque estou referenciando ele como um Foo em Foo foo = new Bar(); ???
Fiquei mais em dúvida ainda após chamar addFive(), pois o valor continua 3 ??
Porque não adicionou 5, o que será que aconteceu, Escopo de variável Local ? sombreanento de variáveis ?
Me perdi nesta parte, se alguem puder me explicar passo a passo o que ocorreu, me ajudaria bastante .
