Olá Pablo, boa noite. Tudo ótimo!
Vamos lá... o erro está apenas na sua classe que tem o método main, segue abaixo o seu código:
class Programa6 {
public static void main(String[] args) {
Funcionario6 f1 = new Funcionario6();
f1.salario = 5000;
f1.titular = new Pessoa(); // Quando vou usar uma classe que está linkada na principal tenho que dizer (ex)
// que f1.titular = new Pessoa();
// Chamando a função Pessoa.
f1.titular.nome = "Pablo";
// Adicionando data como tipo;
f1.dataDeEntrada = new Data(); // Chamo a função Data.
f1.dataDeEntrada.preencheData(05, 06, 1995); // Atribuo os valores a data.
Funcionario6 f2 = new Funcionario6();
f2.salario = 6000;
f2.titular = new Pessoa();
f2.titular.nome = "Felipe Brasileiro";
f2.dataDeEntrada = new Data();
f2.dataDeEntrada.preencheData(07, 06, 2016);
f1.mostra(); // chamo a função mostra.
// f2.mostra();
}
}
O que está acontecendo é que você está chamando o método preencheData da classe Data sem passar os parâmetros que este método exige, se lá você definiu que recebe int dia, int mes, int ano, quem chamar este método precisa passar estes parâmetros de acordo com os tipos que você colocou.
Então para seu programa rodar, basta colocar estes parâmetros, segue abaixo:
class Programa6 {
public static void main(String[] args) {
Funcionario6 f1 = new Funcionario6();
f1.salario = 5000;
f1.titular = new Pessoa(); // Quando vou usar uma classe que está linkada na principal tenho que dizer (ex)
// que f1.titular = new Pessoa();
// Chamando a função Pessoa.
f1.titular.nome = "Pablo";
// Adicionando data como tipo;
f1.dataDeEntrada = new Data(); // Chamo a função Data.
f1.dataDeEntrada.preencheData(05, 06, 1995); // AQUI ESTÁ A MODIFICAÇAO
Funcionario6 f2 = new Funcionario6();
f2.salario = 6000;
f2.titular = new Pessoa();
f2.titular.nome = "Felipe Brasileiro";
f2.dataDeEntrada = new Data();
f2.dataDeEntrada.preencheData(07, 06, 2016); //AQUI ESTÁ A MODIFICAÇAO
f1.mostra(); // chamo a função mostra.
// f2.mostra();
}
}
Voltando para a questão do exercício, acredito que a proposta é você ver o que acontece se você instanciar uma Data sem chamar o método preencheData. Isto é, sem atribuir os valores para dia, mes e ano.
Segue abaixo:
class Programa6 {
public static void main(String[] args) {
Funcionario6 f1 = new Funcionario6();
f1.salario = 5000;
f1.titular = new Pessoa(); // Quando vou usar uma classe que está linkada na principal tenho que dizer (ex)
// que f1.titular = new Pessoa();
// Chamando a função Pessoa.
f1.titular.nome = "Pablo";
// Adicionando data como tipo;
f1.dataDeEntrada = new Data(); //NAO ATRIBUI NENHUM VALOR PARA DIA, MES E ANO, APENAS INSTANCIEI O OBJETO
Funcionario6 f2 = new Funcionario6();
f2.salario = 6000;
f2.titular = new Pessoa();
f2.titular.nome = "Felipe Brasileiro";
f2.dataDeEntrada = new Data(); //NAO ATRIBUI NENHUM VALOR PARA DIA, MES E ANO, APENAS INSTANCIEI O OBJETO
f1.mostra(); // chamo a função mostra.
// f2.mostra();
}
}
Rode o programa e veja o que vai imprimir no seu console!
Foi parecido com isso?
O Pablo ganha 5000.0 R$, e nasceu em: 0/0/0
===========================================================
O que acontece é que cada tipo tem um valor padrão. No caso do tipo int o valor padrão se você não atribuir um valor para ele vai ser 0.
Segue abaixo a tabelinha que peguei da documentação do java, nela tem o valor padrão de cada tipo primitivo:
Data Type | Default Value (for fields) |
---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\u0000' |
String (or any object) | null |
boolean | false |
Espero ter esclarecido sua dúvida :)
Um abraço!