Não entendi bem o trecho de código abaixo
f1.dataDeEntrada = new Data();
f1.dataDeEntrada.preencheData(1, 7, 2009);
Quando escrevo f1.dataDeEntrada = new Data(); estou inicializando o atributo dataDeEntrada com o objeto Data() certo? Mas quando escrevo f1.dataDeEntrada.preencheData(1, 7, 2009); estou chamando o método preencheData da classe Data partindo do atributo de f1 dataDeEntrada e ai não entendi a relação entre eles, pode me explicar melhor por favor.