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