Estou estudando para a certificação e achei essa questão no ExamLab. Eu respondi q a saída será “1Sub 2”. Mas a saída aparece “Sub1 2”.
Não entendi pq acontece isso se o método main manda imprimir primeiro o atributo ge.i e depois chama o método. Pq??? Pq???
public class Greek {
int i = 1;
public int getI() {
System.out.print("Super");
return i;
}
public static void main(String arhs[]) {
Greek ge = new Arabik();
System.out.println(ge.i+" "+ge.getI());
}
}
class Arabik extends Greek {
int i = 2;
public int getI() {
System.out.print("Sub");
return i;
}
}
a) O Java chama ge.i, que retorna o valor 1
b) O Java concatena esse valor “1” ao espaço, ou seja, vai dar "1 ". Note que ainda nada foi impresso, só estamos montando uma string
c) A seguir, o Java chama ge.getI(). Essa rotina faz 2 coisas:
Ela imprime “Sub”
Agora é que ela retorna o valor 2
d) Acabamos de montar a string, que é “1 2”. Depois que a string está montada é que System.out.println pode imprimir a string inteira, ou seja, “1 2”.