Atividade Java

Boa noite a todos,
Preciso de um Help.
Tenho um exercício em Java para fazer mas para mim o conteúdo esta muito avançado, estou com dificuldades para interpretar e usar as funções corretas.
Até o momento presente fiz as declarações, classes, criação do projeto e só, não entendi como declaro a parte final de cada classe conforme anexo e também não tenho ideia de como fazer as demais obrigações.
Agradeço quem me ajudar, porque será um processo meio longo kk

package PrimeiraEntrada;

public abstract class Funcionario {

private String Nome;
private String Cadastro;
private String Funcao;

public String getNome() {
	return Nome;
}
public void setNome(String nome) {
	Nome = nome;
}
public String getCadastro() {
	return Cadastro;
}
public void setCadastro(String cadastro) {
	Cadastro = cadastro;
}
public String getFuncao() {
	return Funcao;
}
public void setFuncao(String funcao) {
	Funcao = funcao;
}

}

package PrimeiraEntrada;

public class Programador {

 private int nivel;
 private double qtdeHorasTrab;

 public int getNivel() {
	return nivel;
}
public void setNivel(int nivel) {
	this.nivel = nivel;
}
public double getQtdeHorasTrab() {
	return qtdeHorasTrab;
}
public void setQtdeHorasTrab(double qtdeHorasTrab) {
	this.qtdeHorasTrab = qtdeHorasTrab;
}

}

package PrimeiraEntrada;

public class Gerente {

private int qtdeProjetos;
private float salarioFixo = 9500;

public int getQtdeProjetos() {
	return qtdeProjetos;
}
public void setQtdeProjetos(int qtdeProjetos) {
	this.qtdeProjetos = qtdeProjetos;
}
public float getSalarioFixo() {
	return salarioFixo;
}
public void setSalarioFixo(float salarioFixo) {
	this.salarioFixo = salarioFixo;
}

}

Pelo diagrama do anexo, nesse código usa-se Polimorfismo.
Sabendo disso, primeiramente você deve extender a classe abstrata Funcionario para as classes Programador e Gerente usando extends, assim:
public class Programador extends Funcionario.
Mesma coisa na classe Gerente.

O exercício trata-se apenas de cadastrar um funcionário (usando uma simples entrada de dados) e printar as informaçôes cadastradas ao final do cadastro.
Além disso, após o final do cadastro o programa deve continuar aberto, permitindo que o usuário cadastre um novo funcionário. Você pode fazer isso com um loop while.

Aquele método calcularSalario(), você simplesmente declara em todas as 3 classes, a única diferença vai ser os argumentos.

package PrimeiraEntrada;

public abstract class Funcionario {
	
	private String nome;
	private String cadastro;
	private String funcao;
	
	
	public void calcularSalario() {
		
	}
	
	
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCadastro() {
		return cadastro;
	}
	public void setCadastro(String cadastro) {
		this.cadastro = cadastro;
	}
	public String getFuncao() {
		return funcao;
	}
	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}
	
	
	
	
}

package PrimeiraEntrada;

public class Programador {
	
	private int nivel;
	private double qtdeHorasTrab;
	private double salario;
	
	public void calcularSalario() 
	{
		if(this.getNivel() == 1) 
		{
			this.salario = 100 * this.getQtdeHorasTrab();
		}
		else 
		{
			
			if(this.getNivel() == 2) 
			{
				this.salario = 75 * this.getQtdeHorasTrab();	
			}
			else 
			{
				if(this.getNivel() ==3)
				{
					this.salario = 50* this.getQtdeHorasTrab();	
				}
			}
		}
		
	}
	
	
	public int getNivel() {
		return nivel;
	}
	public void setNivel(int nivel) {
		this.nivel = nivel;
	}
	public double getQtdeHorasTrab() {
		return qtdeHorasTrab;
	}
	public void setQtdeHorasTrab(double qtdeHorasTrab) {
		this.qtdeHorasTrab = qtdeHorasTrab;
	}
	public double getSalario() {
		return salario;
	}
	public void setSalario(double salario) {
		this.salario = salario;
	}
	
	
	
	}


package PrimeiraEntrada;

public class Gerente {

	private int qtdeProjetos;
	private double salario;

	public void calcularSalario() 
	{ 
		
		if (this.getQtdeProjetos() != 0 && this.getQtdeProjetos() <=5) 
		{
			this.salario = 9500. * 0.08 + 9500;
		}
		else 
		{
			if(this.getQtdeProjetos() >5 && this.getQtdeProjetos() <= 10) 
			{
				this.salario = 9500.00 * 0.12 + 9500;
			}
			else 
			{
				if(this.getQtdeProjetos() >10)
				{
					this.salario = 9500.00 * 0.21 + 9500;
				}
			}
		}
	}
	

	public int getQtdeProjetos() {
		return qtdeProjetos;
	}

	public void setQtdeProjetos(int qtdeProjetos) {
		this.qtdeProjetos = qtdeProjetos;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	
	
}

package PrimeiraEntrada;

import javax.swing.JOptionPane;

public class Executa {

	Funcionario func = new Funcionario();
	Programador prog = new Programador();
	Gerente gere = new Gerente();
		
	
	int i = 1;
	
	
	while (i != 0) 
	{
			func.setNome(JOptionPane.showInputDialog("\nInsira seu Nome:"));
			func.setCadastro(JOptionPane.showInputDialog("Insira Cadastro:"));
			func.setFuncao(JOptionPane.showInputDialog("Insira funcao.\nGerente ou Programador:"));
		
			if (func.getFuncao().equals("Gerente") || func.getFuncao().equals("gerente"))
			{
				gere.setQtdeProjetos(Integer.parseInt(JOptionPane.showInputDialog(null, "Projetos de Gerencia")));
				gere.calcularSalario();
				JOptionPane.showMessageDialog(null, "Nome:  " + func.getNome() + "\nCadastro:  " + func.getCadastro() + "\nFunção:  " + func.getFuncao() + "\nQuantidade de Projetos:  " + gere.getQtdeProjetos() + "\nSalario: R$" + gere.getSalario());
			}
			
			else 
			{
				if (func.getFuncao().equals("Programador") || func.getFuncao().equals("programador")) 
				{
					prog.setNivel(Integer.parseInt(JOptionPane.showInputDialog(null, "Qual o seu nível na empresa?")));
					prog.setQtdeHorasTrab(Double.parseDouble(JOptionPane.showInputDialog(null, "Qual a carga horária?")));
					prog.calcularSalario();
					JOptionPane.showMessageDialog(null, "Nome:  " + func.getNome() + "\nCadastro:  " + func.getCadastro() + "\nFunção: " + func.getFuncao() + "\nNivel:  " + prog.getNivel() + "\nCarga horária:  " + prog.getQtdeHorasTrab()+ " Horas" + "\nSalario:  R$" + prog.getSalario());
				}
			}
		i = JOptionPane.showConfirmDialog(null, "Deseja continuar?");
			if (i == JOptionPane.YES_OPTION) 
			{
				i = 1;
			}
			else 
			{
				i=0;
				JOptionPane.showMessageDialog(null, "Programa encerrado");
				}
			}
		}
}

Consegue conferir pra mim se é isso mesmo

Programador e Gerente deveriam estender Funcionario.
O método calcularSalario() da classe Funcionario deveria ser abstrato.

package PrimeiraEntrada;

public abstract class Funcionario {
	
	private String nome;
	private String cadastro;
	private String funcao;
	
	
	public abstract calcularSalario() {
		
	}
	
	
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCadastro() {
		return cadastro;
	}
	public void setCadastro(String cadastro) {
		this.cadastro = cadastro;
	}
	public String getFuncao() {
		return funcao;
	}
	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}
	
	
	
	
}

package PrimeiraEntrada;

public class Programador extends Funcionario {
	
	private int nivel;
	private double qtdeHorasTrab;
	private double salario;
	
	public abstract calcularSalario() 
	{
		if(this.getNivel() == 1) 
		{
			this.salario = 100 * this.getQtdeHorasTrab();
		}
		else 
		{
			
			if(this.getNivel() == 2) 
			{
				this.salario = 75 * this.getQtdeHorasTrab();	
			}
			else 
			{
				if(this.getNivel() ==3)
				{
					this.salario = 50* this.getQtdeHorasTrab();	
				}
			}
		}
		
	}
	
	
	public int getNivel() {
		return nivel;
	}
	public void setNivel(int nivel) {
		this.nivel = nivel;
	}
	public double getQtdeHorasTrab() {
		return qtdeHorasTrab;
	}
	public void setQtdeHorasTrab(double qtdeHorasTrab) {
		this.qtdeHorasTrab = qtdeHorasTrab;
	}
	public double getSalario() {
		return salario;
	}
	public void setSalario(double salario) {
		this.salario = salario;
	}
	
	
	
	}


package PrimeiraEntrada;

public class Gerente extends Funcionario{

	private int qtdeProjetos;
	private double salario;

	public abstract calcularSalario() 
	{ 
		
		if (this.getQtdeProjetos() != 0 && this.getQtdeProjetos() <=5) 
		{
			this.salario = 9500. * 0.08 + 9500;
		}
		else 
		{
			if(this.getQtdeProjetos() >5 && this.getQtdeProjetos() <= 10) 
			{
				this.salario = 9500.00 * 0.12 + 9500;
			}
			else 
			{
				if(this.getQtdeProjetos() >10)
				{
					this.salario = 9500.00 * 0.21 + 9500;
				}
			}
		}
	}
	

	public int getQtdeProjetos() {
		return qtdeProjetos;
	}

	public void setQtdeProjetos(int qtdeProjetos) {
		this.qtdeProjetos = qtdeProjetos;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	
	
}

package PrimeiraEntrada;

import javax.swing.JOptionPane;

public class Executa {

	Funcionario func = new Funcionario();
	Programador prog = new Programador();
	Gerente gere = new Gerente();
		
	
	int i = 1;
	
	
	while (i != 0) 
	{
			func.setNome(JOptionPane.showInputDialog("\nInsira seu Nome:"));
			func.setCadastro(JOptionPane.showInputDialog("Insira Cadastro:"));
			func.setFuncao(JOptionPane.showInputDialog("Insira funcao.\nGerente ou Programador:"));
		
			if (func.getFuncao().equals("Gerente") || func.getFuncao().equals("gerente"))
			{
				gere.setQtdeProjetos(Integer.parseInt(JOptionPane.showInputDialog(null, "Projetos de Gerencia")));
				gere.calcularSalario();
				JOptionPane.showMessageDialog(null, "Nome:  " + func.getNome() + "\nCadastro:  " + func.getCadastro() + "\nFunção:  " + func.getFuncao() + "\nQuantidade de Projetos:  " + gere.getQtdeProjetos() + "\nSalario: R$" + gere.getSalario());
			}
			
			else 
			{
				if (func.getFuncao().equals("Programador") || func.getFuncao().equals("programador")) 
				{
					prog.setNivel(Integer.parseInt(JOptionPane.showInputDialog(null, "Qual o seu nível na empresa?")));
					prog.setQtdeHorasTrab(Double.parseDouble(JOptionPane.showInputDialog(null, "Qual a carga horária?")));
					prog.calcularSalario();
					JOptionPane.showMessageDialog(null, "Nome:  " + func.getNome() + "\nCadastro:  " + func.getCadastro() + "\nFunção: " + func.getFuncao() + "\nNivel:  " + prog.getNivel() + "\nCarga horária:  " + prog.getQtdeHorasTrab()+ " Horas" + "\nSalario:  R$" + prog.getSalario());
				}
			}
		i = JOptionPane.showConfirmDialog(null, "Deseja continuar?");
			if (i == JOptionPane.YES_OPTION) 
			{
				i = 1;
			}
			else 
			{
				i=0;
				JOptionPane.showMessageDialog(null, "Programa encerrado");
				}
			}
		}
}

Tenho que mudar todos os publics void para abstrato ?

Só o método calcularSalario() da classe Funcionario deve ser abstrato.
Nas classes Programador e Gerente ele não será abstrato.

Métodos abstratos não possuem corpo, tem que remover o { }.
Faltou definir o tipo de retorno do método.

Não entendi a parte de retornar a parte do método, consegue me esclarecer melhor ?

Na realidade é o retorno do método.

Imagine que você fala pra sua mãe que vai ao mercado, e pergunta se ela quer algo.

O método é “perguntarPraMae( )”, e o retorno do método é o que ela vai lhe dizer para comprar pra ela
no caso seria provavelmente List[String] listaDeCompras

O método calcularSalario tem que ser void ou tem que retornar o salário?

Sr’s agradeço a ajuda, a atividade ja deu o prazo kk
Ambos ajudaram.

Pelo menos conseguiu fazer?

Apanhei um pouco mais foi kk

1 curtida