[Resolvido]Variáveis de instância

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:

[code]public class Duck {
int size;

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

}[/code]

[code]public class UseADuck {

public static void main (String[] args) {
	Duck d = new Duck(42);
}

}[/code]
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?

Sim, o valor default é 0.

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

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

ou sobrecarregar o construtor.[code]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);  
}  

} [/code]

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.

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

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

Vlw Rodrigo e Sami pela atenção