Wilhans:
Amigos,
Podemos fazer de um atributo de uma interface ser uma cosntante. OK, mas fiz o seguinte código a nivel de exemplo, e notei que o valor do atributo “VALOR” esta sofrendo alteração.
Alguém poderia explicar o porque de tal situação ?
interface InterFaceTeste
{
public final static int VALOR = 0;
void metodoInter();
}
class InterfaceAtributos implements InterFaceTeste{
static int VALOR = 1;
public void metodoInter()
{
System.out.println(VALOR + 1 );
}
public static void main(String[] args)
{
System.out.println("valor 'e : " + VALOR); // situacao A
InterfaceAtributos ia = new InterfaceAtributos();
ia.metodoInter();// situacao B
}
}
situacao A = 1 e
situacao B = 2 !!
Obrigado.
Cara, acho que temos alguns problemas com conceitos do java aqui.
Vamos lá:
1º - O valor da constante não está sendo alterado.
Quando vc escreve:
System.out.println(VALOR + 1 );
Seria o mesmo que escrever:
System.out.println(1 + 1 );
O que é impresso é o resultado do cálculo, sem alterar o valor de VALOR.
2º - O escopo das variáveis.
Se você declarar uma constante X em uma Interface e criar uma classe que implementa a interface, o que acontecerá quando o nome X for referenciado será o seguinte:
a) se você estiver executando o método que declara uma variável com o nome de X, essa variável será referenciada. Se você quiser referenciar o X atributo da classe, deverá usar this.X; para usar o X constante da interface, deverá usar [nome interface].X;
b) se você não estiver executando o método que declara a variável com nome X, a referencia será para o atributo X, sem a necessidade do uso de this - mas aconselho a sempre utilizar.
c) se o método que você está executando não tiver uma variável com nome X e nem a classe que possui o método tiver um atributo com nome X, automanticamente, o a referencia X irá apontar para a constante da interface - novamente aconselho a sempre utilizar o “prefixo” (nome da interface).