Olá!!!
Por favor, agora eu fiquei confuso e preciso entender como isso acontece...
Considere os seguintes códigos ( definitivamente não serve pra nada, mas... ):
RetornaNumero.java:
public class RetornaNumero {
public int i;
public RetornaNumero() {
i = 10;
}
}
RetornaNumeroNovo.java:
public class RetornaNumeroNovo {
public void printNumero() {
System.out.println("O numero e " + i );
}
}
Teste.java:
public class Teste {
public static void main ( String args[] ) {
RetornaNumeroNovo r = new RetornaNumeroNovo();
r.printNumero();
}
}
Até aí, tudo bem. Compilo os 3 arquivos fonte e que maravilha!!! Ele imprime 10 na tela!!! :D
Mas acontece que se eu alterar a declaração da variável i na classe RetornaNumero para private, recompilo RetornaNumero.java e executo o Teste.class, para meu espanto, o programa "ainda" imprimiu 10 na tela!!! :shock:
Na verdade a linha System.out.println("O numero e " + i ); quebra as regras de escopo... :roll:
Eu sou obrigado a recompilar todas as classes descendentes quando eu mudo uma superclasse? Não deveria ser automático, já que eu utilizo arquivos .class separados? :?:
, a declaração correta - e que usei no teste - é a seguinte:
