Olá depois de muito esforço meu código ficou assim, demorei muito a entender a lógica, então, resolvi compartilhar com vocês.
// Classe "principal"
class Funcionario3 {
// Atributos dessa classe;
Pessoa titular; // Ligação da classe Funcionario2 a classe Pessoa.
String setor;
double salario;
double valeRefeicao;
// Metodos utilizados diretamente nesta classe
// Metdodo para aumento de salario.
void recebeAumento(double aumento){
aumento += salario; // Uso o += em subistituição de (n = n + n).
}
double calculaGanhoAnual(){
return (this.salario + this.valeRefeicao) * 12;
}
double salarioMaisVale(){
return this.salario + this.valeRefeicao;
}
// Metodo para mostrar.
// Uso esse metodo para não precisar ficar usando o System.out.println(); sempre que quiser imprimir
// Ele vai mais além evitando ter que ficar digitando o nome do usuario sempre para se ter o que quer dele.
// usando o this. eu automatizo essa função.
void mostra(){
// Impressões de meu programa.
// Usando um salto de linha para melhorar a visualização da informação.
System.out.println("==================================================================================");
System.out.println();
System.out.println("O funcionario " + this.titular.nome + " Tem salario atual de: " + this.salario);
System.out.println(); // Usando um salto de linha para melhorar a visualização da informação.
System.out.println("O vale refeicao de " + this.titular.nome + " e de: " + this.valeRefeicao);
System.out.println();
System.out.println("Somando o salario com o vale que ele recebe da: " + this.salarioMaisVale() + " por mes.");
System.out.println();
System.out.println("Ele recebe: " + this.calculaGanhoAnual() + " por ano.");
System.out.println();
System.out.println("Tendo " + this.titular.quantosAnosTem() + " anos.");
System.out.println();
System.out.println("ja estando na empresa a " + this.titular.quantosAnosNaEmpresa() + " anos.");
System.out.println();
// Usando um iff para testar se a pessoa é casada e dai fazer a impressão correta
// do estado civil.
if (this.titular.estadoCivil == "sim" || this.titular.estadoCivil == "SIM"){
System.out.println("sendo casado");
} else {
System.out.println("Sendo Solteiro");
}
System.out.println();
System.out.println("==================================================================================");
}
}
// Classe Pessoa.
// Criamos a classe Pessoa que é setada a classe principal.
class Pessoa {
int anoAtual = 2017; // criei a variavel anoAtual para
// facilitar o calculo que necessitam do ano, assim,
String nome;
int anoDeNascimento;
int idade = 2017 - anoDeNascimento;
String estadoCivil;
int anoDeAdesao;
// Metodo quantosAnosTem.
int quantosAnosTem(){
return anoAtual - anoDeNascimento;
}
// Metodo quantosAnosNaEmpresa.
int quantosAnosNaEmpresa(){
return anoAtual - anoDeAdesao;
}
}
// Classe Programa2
// Aqui é onde eu realmente utilizo os dados das classe anteriores.
class Programa2 {
// Defino o método que a classe irá funcionar.
public static void main(String[] args){
// Crio um funcionario f1 usando a classe principal.
Funcionario3 f1 = new Funcionario3(); // Aqui uso Funcionario f1 = new...
// faço isso porque quando uso o f1.mostra(); digo que quero usar a função mostra
// e quero que ela use o f1 em todos os thi. da função mostra, quer seria o antigo pablo.
// que deveria ser digitado em todos os System.ou...
// Se quiser criar outro usuário tenho que usar o Funcionario3 f2 (por ex) = new Funcionario3();
// assim meu this quando solicitado será subistiuido pelo f1 e f2 que são pessoa diferentes.
f1.setor = "TI";
f1.salario = 2000;
f1.valeRefeicao = 800;
// Aqui faço o pablo usar a classe Pessoa passando pela
// classe principal.
f1.titular = new Pessoa();
// A diferença da lincagem desta classe com anterior
// É que uso pablo. mais o link entre a classe principal e pessoa
// que é o titular. dai sigo com o atributo que quero utilizar
// ex: pablo.titular.nome = "pablo...";
f1.titular.nome = "Pablo de Abreu Vieira";
f1.titular.anoDeNascimento = 1988;
//pablo.titular.idade = 2017 - anoDeNascimento;
f1.titular.estadoCivil = "sim";
f1.titular.anoDeAdesao = 2011;
// Fazendo os metodos funcionarem (metodos que se usam da classe principal).
f1.recebeAumento(300); // incremento um valor para o aumento.
f1.calculaGanhoAnual(); // chamo o metodo calculaGanhoAnual.
f1.salarioMaisVale(); //chamos o metodo salarioMaisVale.
// Metodos que se usam da classe pessoa.
f1.titular.quantosAnosTem();
f1.titular.quantosAnosNaEmpresa();
// Usando a função mostra
f1.mostra();
}
}