Exercício envolvendo classes e polimorfismo

5 Resolva a seguinte situação utilizando os conceitos aprendidos. Uma empresa quer manter o registro da vida acadêmica de todos os funcionários, o modelo deve ontemplar o registro das seguintes informações, de forma incremental:
5.1 Para o funcionário que não estudou, apenas o nome e o código funcional;
5.2 Para o funcionário que concluiu o ensino básico, a escola;
5.3 Para o funcionário que concluiu o ensino médio, a escola;
5.4 Para o funcionário que concluiu a graduação, a Universidade;
6 Estenda o modelo implementado no exercício anterior de forma que todo funcionário possua uma renda básica de R$ 1000,00 e:
6.1 Com a conclusão do ensino básico a renda total é renda básica acrescentada em 10%;
6.2 Com a conclusão do ensino médio a renda total é a renda do nível anterior acrescentada em 50%;
6.3 Com a conclusão da graduação a renda total é a renda do nível anterior acrescentada em 100%;
6.4 Todos os cálculos são efetuados sempre sobre a última renda obtida.
7 Crie um programa que simule uma empresa com 10 funcionários, utilize um array, sendo que a escolaridade dos funcionários é distribuída da seguinte forma: 40% ensino básico, 40% ensino médio e 20% nível superior. Calcule os custos da empresa com salários totais e por nível de escolaridade, utilize a classe funcionário desenvolvida no exercício anterior.

To com dificuldade em começar esse exercício, nesse caso terei que criar apenas uma classe? Ou uma classe para cada escolaridade diferente?

Se é para estudar polimorfismo, então é uma classe diferente para cada escolaridade, e cada uma dessas estendem uma da outra:

Funcionario ≥ FuncionarioEnsinoBasico ≥ FuncionarioEnsinoMedio ≥ FuncionarioEnsinoSuperior.

Não precisa reescrever o nome, código, etc para cada uma, a herança já vai fazer isso.

Obs: pelo que entendi, vai ter uma escola para ensino básico e outra pra médio.

Entendi…e pra calcular a renda total vou ter que usar a sobreescrita nos métodos né?

é uma das soluções possiveis… uma outra é manter um método protected, na classe para ajustar a taxa

[code]public class Funcionario {
private double taxa = 1;

public Funcionario() {
    
}

protected void setTaxa(double taxa) {
    this.taxa = taxa;
}

}[/code]

Ai para FuncionarioBasico

[code]public class FuncionarioBasico extends Funcionario{

public FuncionarioBasico() {
    super.setTaxa(1.1); //10% de taxa
}

}[/code]

etc …

Não entendi…pq vc cria esse método?

public Funcionario() {

}

dexa eu tentar resolver usando a sobreposição dos métodos primeiro…tipo, como eu faço pra saber o custo de todos os funcionarios de uma determinada classe? Eu tenho na classe principal(onde está o metodo main) meus 10 objetos do tipo Funcionario…a única forma que pensei de fazer é passar pra um método que faça o calculo geral a quantidade de funcionarios daquela classe, será que é isso que o exercício pede?

[quote=gRoOve]Não entendi…pq vc cria esse método?

[code]
public Funcionario() {

}
[/code][/quote]
isto não é um método, é um Construtor, por padrão o Java implicitamente já escreve esse construtor, que libera o new Funcionario(), porem caso vc crie outro construtor como new Funcionario(String nome, int id), vc precisa definir o primeiro para que se possa usar o construtor vazio…

na verdade é algo assim

[code]public class Funcionario {
private double rendaBasica = 1000; // no exercicio é dito, que a renda é de 1000 para todos
public double getRendaTotal() {
return getRendaBasica() * getTaxa();
}

public double getRendaBasica() {
     return rendaBasica;
}

public double getRendaTotal() {
    return getRandaBasica();         
}

}

public FuncionarioBasico extends Funcionario{
public double getRendaTotal() {
return super.getRendaTotal() * 1.1 //matematicamente 1.1 = 110% … o acrescimo é de 10%
}
}[/code]

a cada classe… vc invoca a rendaTotal da classe anterior, e multiplica por 1 + taxa

o que esse super faz exatamente? Cara não consegui entender o que vc fez nesse último code, tem dois métodos com o mesmo nome…eu já isso, chama-se sobrecarga né? Mas ai não ta mudando nada, são exatamente iguais…

sim é sobrecarga sim, não não faz a mesma coisa não…

super é uma referencia a classe superior na linha da herança… ou seja, em FuncionarioBasico, quando falo de super.algumaCoisa() eu estou querendo falar da classe Funcionario, falando que estou referenciando a classe que eu extendi…

public FuncionarioBasico extends Funcionario{ public double getRendaTotal() { return super.getRendaTotal() * 1.1; //matematicamente 1.1 = 110% .... o acrescimo é de 10% } }

esse trecho quer dizer que para FuncionarioBasico a renda total será a renda total de Funcionario multiplicada por 1.1, ou seja, salario 10% maior que o de funcionario…

return super.getRendaTotal() * 1.1

No caso do método:

getRendaTotal

Como o compilador vai saber qual return usar? Pelas expressões no return? Tentei fazer assim aqui e o eclipse ta apontando erro dizendo que tem um método duplicado…

Estou tentando dar continuidade neste exercício porém parei no item 7. Tipo, consegui criar o método que calcula os gastos totais da empresa, não estou conseguindo fazer o que separa por nível de escolaridade "/

public class Empresa {
	Funcionario[] qtdFunc = new Funcionario[10];
	private double gastoTotal;
	
	public void contratarFuncionario(int id, Funcionario func)
	{
		qtdFunc[id-1] = func;
	}
	
	public double gastoTotal()
	{
		for(Funcionario obj : qtdFunc)
		{
			if(obj==null)
				break;
			gastoTotal += obj.getRendaTotal();
		}
		return gastoTotal;
	}
	
	public double gastoNivelEscolaridade()
	{
		for(Funcionario obj : qtdFunc)
		{
			if(obj.getClass().)
		}
	}
}