Oi André,
o Roberto te indicou as linhas problemáticas, mesmo:
f1.setData = new Data();
f1.preencheData(1,5,2010).setData();
O problema aqui é que o setData
é um método e não um atributo, então, como o exercício sugere, em vez de usar o =
, é necessário passar a informação dentro de parênteses:
f1.setData(new Data());
Agora, como você bem percebeu, a Data colocada alí está vazia: dia, mes e ano valem zero. Então, você gostaria de chamar o preencheData(1,5,2010)
. Apenas, atente para o fato de que esse método é da Data
e não do Funcionario
, então chamá-lo no f1
não é uma opção.
São três formas possíveis para resolver esse problema. A primeira é pegar a data do funcionario e chamar o método nela:
f1.setData(new Data());
f1.getData().preencheData(1,5,2010);
A segunda possibilidade é criar uma variáve para a Data
, preenchê-la e, só então, setar no Funcionario
:
Data dia = new Data();
dia.preencheData(1,5,2010);
f1.setData(dia);
E, finalmente, a terceira (e mais elegante) solução envolve alterar um pouco a classe Data
. Note que realmente não faz muito sentido termos uma data sem dia, nem uma sem mês, nem uma sem ano. São atributos que devem necessariamente ser preenchidos... e assim deveriam estar no construtor.
class Data {
int dia;
int mes;
int ano;
public Data(int dia, int mes, int ano){
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
}
Note também que, nesse caso, o método preencheData
ficaria inútil porque o construtor já faz o trabalho dele. E, como agora as informações são passadas no construtor, na TestaFuncionario
, aquelas linhas seriam substituídas por:
f1.setData(new Data(1,5,2010));
Pegou?