Esse é um segredo das interfaces: é possível criar um campo constante em uma interface, que normalmente seria usado para isto aqui:
interfaceConstantes{publicfinalStringZERO="ZERO";// note o "final"}classClasseimplementsConstants{publicClasse(){}}classTeste{publicstaticvoidmain(String[]args){System.out.println(Classe.ZERO);// imprime ZERO}}
No seu caso temos uma aberração que é o uso de uma classe mutável (num) em vez de uma classe imutável como a classe String. Mas a idéia é a mesma (é mais ou menos como se fôssemos usar uma variável estática da classe).
a propriedade x, inteira de num, é definida como de pacote, portanto estando a classe dentro do mesmo pacote, ela tem visão e pode alterar o valor da propriedade sem problemas
soublade:
E na interface eu posso instanciar um objeto?
sim vc pode, e ele se torna uma constante, inerface pode definir assinatura de métodos e constantes...
S
soublade
thingol:
Esse é um segredo das interfaces: é possível criar um campo constante em uma interface, que normalmente seria usado para isto aqui:
interfaceConstantes{publicfinalStringZERO="ZERO";// note o "final"}classClasseimplementsConstants{publicClasse(){}}classTeste{publicstaticvoidmain(String[]args){System.out.println(Classe.ZERO);// imprime ZERO}}
No seu caso temos uma aberração que é o uso de uma classe mutável (num) em vez de uma classe imutável como a classe String. Mas a idéia é a mesma (é mais ou menos como se fôssemos usar uma variável estática da classe).
mais o num está como FINAL. E mesmo assim ele ser modificado?
T
thingol
A referência a n não pode ser modificada (por isso é que é final), mas não há nada que proíba ao objeto referido por n de ser modificado. E é por isso que é possível fazer “n.x = 10”.
S
soublade
Hum entendi…
como n é final, ele nao pode ser modificada, porem xnao está marcado como final, então ela pode ser modificada
T
thingol
Exatamente. Isso é que é bem chato no Java. Entretanto, é algo melhor que o C++ (que tem uma palavra-chave “const”, mas que nem sempre funciona do jeito desejado. Em C++ você pode ter um “const int *” ou um “int * const” e essas coisas são diferentes entre si.
S
soublade
beleza…
vlw pela ajuda thingol…
se tu poder me ajudar tb no outro topico que eu fiz antes desse fica agradecido tb!hehehehe
S
soublade
beleza…
vlw pela ajuda thingol…
se tu poder me ajudar tb no outro topico que eu fiz antes desse fica agradecido tb!hehehehe