[Resolvido]Variáveis de instância

7 respostas
javahunter

No livro use a cabeça java tem uma observação que diz:

"Na verdade, as variáveis de instância têm um valor padrão. 0 ou 0.0 para variáveis primitivas numéricas, falso para as booleanas e nulo para as referências."

ai fiz esse exemplo do livro:
public class Duck {
	int size;
	
	public Duck(int duckSize) {
		
			System.out.println("Quack");
			
			size = duckSize;
			
			System.out.println("O tamanho eh igual a " + size);
	}
}
public class UseADuck {
	
	public static void main (String[] args) {
		Duck d = new Duck(42);
	}
}
mas quando retiro o valor do argumento na linha 4 da classe UseADuck e compilo então dispara essa mensagem:

UseADuck.java:4: error: constructor Duck in class Duck cannot be applied to give
n types;
Duck d = new Duck();
^
required: int
found: no arguments
reason: actual and formal argument lists differ in length
1 error

ai pergunto o valor padrão de int não é 0? ou o erro é por causa de outra coisa?

7 Respostas

Rodrigo_Sasaki

Sim, o valor default é 0.

O problema é que você não tem um construtor na classe Duck que não receba nenhum argumento.

javahunter

No caso teria que retirar o int duckSize que esta como parâmetro da classe Duck?

Rodrigo_Sasaki
ou sobrecarregar o construtor.
public class Duck {  
    int size;  

    public Duck(){

    }
      
    public Duck(int duckSize) {  
          
            System.out.println("Quack");  
              
            size = duckSize;  
              
            System.out.println("O tamanho eh igual a " + size);  
    }  
}
javahunter

uuhhhhhhhmmmmmmmmm interessante, Rodrigo poderia me dizer porque quando coloco 42 como argumento ele imprimi a mensagem e quando não coloco não aparece nada Obs: fazendo do jeito que vc postou.

Rodrigo_Sasaki

Porque não tem o código de imprimir no construtor que não recebe nada, é só adicionar o mesmo sysout ali.

Sami_Koivu

Há alguma coisa curiosa acontecendo aí. No código que você postou, a linha 4 da classe UseADuck eh assim:

Duck d = new Duck(42);

Que funcionaria, passando um int pro contrutor da classe Duck.

Porem o compilador está dizendo que a linha 4 da sua classe UseADuck eh assim:

Duck d = new Duck();

Que não compila, porque está faltando o argumento do tipo int.

[]s,
Sami

javahunter

Vlw Rodrigo e Sami pela atenção

Criado 24 de janeiro de 2013
Ultima resposta 24 de jan. de 2013
Respostas 7
Participantes 3