Artigos de Tecnologia e Negócios

Declarando duas variáveis com o mesmo nome

Alex Felipe
Alex Felipe

Estou me preparando para a certificação da Oracle e surgiu o seguinte cenário: posso declarar variáveis com o mesmo nome na mesma classe? Vamos verificar a classe Livro:


public class Livro {

private double preco = 10; public double calculaImposto(){ return preco; }

//métodos...

}

Testando minha classe:


Livro l = new Livro(); System.out.println("Imposto do livro: " + l.calculaImposto());

O resultado é o esperado:

 > Imposto do livro: 10.0

O método calculaImposto() sofreu um pequeno ajuste e agora ele mesmo define o valor padrão do imposto:


//código

private double preco = 10;

public double calculaImposto(){ double preco = 12.30; return preco; }

Espera aí! Duas variáveis com o mesmo nome? Pode isso? Qual valor será retornado? Testando a classe:

 > Imposto do livro: 12.3

Como podemos ver, a variável membro preco não foi retornada, declaramos uma variável local com o mesmo nome, por isso o calculaImposto() deu prioridade para a variável com valor 12.3 e a retornou. A capacidade de esconder uma variável membro é uma técnica conhecida como shadowing. Poderíamos, também, enviar um parâmetro com o mesmo nome:


//código

private double preco = 10;

public double calculaImposto(double preco){ return preco; }

Modificamos a chamada do calculaImposto() para enviar um double:


System.out.println("Imposto do livro: l.calculaImposto(15.5));

Verificando o resultado:

 > Imposto do livro: 15.5

Muito bom, mas... E se e eu quiser retornar o valor da variável membro? É simples, basta utilizar a palavra chave this:


private double preco = 10; public double calculaImposto(double preco){ return this.preco; }

Imprimindo o resultado:

 > Imposto do livro: 10.0

Veja que agora o valor retornado foi o da variável membro, ou seja, o atributo da classe!

Agora já sabe como lidar com variáveis locais e membros? Gostou do shadowing? Quer aprender mais dicas e nunca mais cair em pegadinhas no Java? Pensando nisso, o instrutor Guilherme Silveira, criou a trilha de certificação Java no Alura. Com 9 cursos preparatórios para a certificação da Oracle!

Artigos de Tecnologia e Negócios