achava que o compilador não saberia lidar com duas variáveis com o mesmo nome no construtor! isso ta certo? e o mesmo nome no parâmetro e na variável
achava que o compilador não saberia lidar com duas variáveis com o mesmo nome no construtor! isso ta certo? e o mesmo nome no parâmetro e na variável
Logicamente, não é possível declarar duas variáveis no mesmo escopo com o mesmo nome:
public void bla() { int a = 0; int a = 10;// erro }
apesar de parecer estranho, é permitido declarar variáveis locais ou parâmetros com o mesmo nome de variáveis de instância ou de classe. Essa técnica é chamada de ::shadowing::. Nesses casos, é possível resolver a ambiguidade: para variáveis de classe, podemos referenciar pela própria classe; para variáveis de instância, usamos a palavra chave this:
class Pessoa {
static int x = 0; int y = 0;
public static void setX(int x) { // Usando a referência da classe Pessoa.x = x; }
public void setY(int y) { // usando o this this.y = y; } }
No caso do exercício, quando chama o método : void c(int c) { c = c; }
passando o valor 10 ele apenas fala que c referencia ele mesmo; caso queira atribuir o valor do parâmetro para variável c da Classe teriamos que colocar o this.c .