Boa tarde Amigos.
Travei em um dos exercícios e preciso de uma luz de vocês para prosseguir minha jornada.
No exercício 2 da aula 5 de Java I, é pedido que criemos Getters e Setters para que os atributos da classe "Funcionários" possam receber modificadores de visibilidade ("Private") e não possam ser modificados em outras classes sem passar pelos métodos. Para todos os outros atributos ("fun.nome", "fun.departamento", etc), consegui realizar o prcesso de forma rápida e fácil. Quando cheguei no atributo com a data de entrada me perdi.
Ao criarmos o objeto da classe Funcionário ("fun"), ele atribui ao "dataDeEntrada" um novo objeto criado na classe Data. Enquanto o atributo "dataDeEntrada" está com modificador "Public", consigo realizar o processo normalmente através da classe "TesteEmpresa". Ao tornar ele Private, não consigo atribuir ao dataDeEntrada o objeto criado. Não sei acessar o objeto que ele criou passando pelo "setDataDeEntrada".
No código abaixo está o dataDeEntrada funcionando com o modificador Public. Vou colocar um comentário com o código que estou tentando quando coloco o atributo em Private.
public class Empresa {
String nome;
String cnpj;
Funcionario[] empregados;
int livre = 0;
void adiciona(Funcionario fun) {
this.empregados[this.livre] = fun;
this.livre++;
}
void mostraEmpregado() {
for (int i = 0; i < this.empregados.length; i++) {
System.out.println("Funcionário na posição: " + i);
System.out.println("Salário: R$" + empregados[i].getSalario());
}
}
void mostraTodasAsInformacoes() {
for (int i = 0; i < this.empregados.length; i++) {
System.out.println("Funcionário na posição: " + i);
this.empregados[i].mostra();
}
}
boolean contem(Funcionario fun) {
for (int i = 0; i < this.empregados.length; i++) {
if (fun == this.empregados[i]) {
return true;
}
}
return false;
}
}
public class Funcionario {
private String nome;
private String departamento;
private double salario;
public Data dataDeEntrada = new Data();
private String rg;
public void recebeAumento(double valor) {
this.salario += valor;
}
public double getGanhoAnual() {
return this.salario * 12;
}
public void mostra() {
System.out.println("Nome: " + this.nome);
System.out.println("Departamento: " + this.departamento);
System.out.println("Salário: " + this.salario);
System.out.println("Admissão: " + this.getDataDeEntrada().getFormatada());
System.out.println("RG: " + this.rg);
System.out.println("***");
}
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setDepartamento(String departamento) {
this.departamento = departamento;
}
public String getDepartamento() {
return departamento;
}
public void setSalario(double salario) {
this.salario = salario;
}
public double getSalario() {
return salario;
}
public void setDataDeEntrada(Data dataDeEntrada) {
this.dataDeEntrada = dataDeEntrada;
}
public Data getDataDeEntrada() {
return this.dataDeEntrada;
}
public void setRg(String rg) {
this.rg = rg;
}
public String getRg() {
return this.rg;
}
}
public class Data {
int dia;
int mes;
int ano;
void preencheData(int dia, int mes, int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
String getFormatada() {
return this.dia + "/" + this.mes + "/" +this.ano;
}
}
class TesteEmpresa {
public static void main(String[] Args) {
Empresa emp = new Empresa();
emp.nome = "D. Technology";
emp.cnpj = "20.000.111/00001-20";
emp.empregados = new Funcionario[10];
for (int i = 0; i < 10; i++) {
Funcionario fun = new Funcionario();
fun.setNome("João da Silva " + i);
fun.setDepartamento("Departamento Pessoal");
fun.setSalario(100 + i);
fun.dataDeEntrada.preencheData(1, 2, 2018);
//fun.setDataDeEntrada(fun.dataDeEntrada.preencheData(1, 2, 2018));
fun.setRg("1300099"+i);
emp.adiciona(fun);
}
emp.mostraEmpregado();
emp.mostraTodasAsInformacoes();
}
}
Quem puder me iluminar, serei eternamente grato. :)