Ola Pessoal, estou tentando entender alguns códigos aqui:
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() { this.a +=5; }
}
invoked with:
Foo foo = new Bar();
foo.addFive();
System.out.println("Value: "+ foo.a);
Gostaria de entender o pq o resultado deste código é tres e não treze?
você declarou o atributo A nas duas instãncias. Quando vc invoca o método “addFive” o método invocado será da classe BAR, que irá adicionar 5 ao atributo A da sua instância.
Depois quando vc dá um “foo.a” o compilador encontrar um atributro com o nome a na classe foo e usa ele. Se a classe BAR não tivesse sobreado o atributo imprimiria a soma.