Java abstract class exercise doubt

Asked

Viewed 640 times

6

I would like to ask for your help again in this exercise. This time using the abstract class.

Create an abstract class FuncionarioAbstract with the attribute String name and abstract method: public double getSalario(); There are two classes that inherit from FuncionarioAbstract and are concrete: Administrador and Gerente. Administrador has a salary of 2000. Gerente already has one more attribute double comissao and your salary is 2500 + comissao.

Create a class Principal with a list of FuncionarioAbstract (creating objects of the type Administrador and Gerente) using the interface Set and the class HashSet package java.util. And create a method public static void imprimir(Set funcionarios) printing the name and salary of each employee.

I’ve done all three classes and I’m finishing the main one, I’ll post the code here and I’d like to know if it’s correct.

Class FuncionarioAbstract:

public abstract class FuncionarioAbstract {
        
        private String nome;
        
        public abstract double getSalario();
    
        public String getNome() {
            return nome;
        }
    
        public void setNome(String nome) {
            this.nome = nome;
        }   
}

Class Administrador:

public class Administrador extends FuncionarioAbstract {
        
        public double getSalario() {
            return 2000;
        }
    
}

Class Gerente:

public class Gerente extends FuncionarioAbstract {
        
        public double getSalario() {
            return 2500 + comissao;
        }
        
        private double comissao;
        
        public double getComissao() {
            return comissao;
        }
        
        public void setComissao(double comissao) {
            this.comissao = comissao;
        }    
}

Class Principal:

        public static void main (String[] args) {
    
    

            Set <FuncionarioAbstract> funcionario = new HashSet<FuncionarioAbstract>();

            Gerente funcionario1 = new Gerente();
            funcionario1.setNome("Ramon Oliveira");
            funcionario1.setComissao(1750);
            funcionario.add(funcionario1);

            Administrador funcionario2 = new Administrador();
            funcionario2.setNome("Eliana Franco");
            funcionario.add(funcionario2);
            
           
            
            imprimir(funcionario);

    }
    
    public static void imprimir(Set<FuncionarioAbstract> funcionario) {
        
        for (FuncionarioAbstract f : funcionario) {
            
            System.out.println("Nome do funcionário: " + f.getNome());
            System.out.println("Salário do Funcionário: " + f.getSalario());
        }
    }
    
}

My question would be how to use that Set employees to print the name and salary of employees.

4 answers

8


You just iterate the HashSet and print what you want

//Chamada do método
imprimir(fa);

//Declaração do método
public static void imprimir(Set<FuncionarioAbstract> funcionarios)
{
    for (FuncionarioAbstract f : funcionarios) {
        System.out.println(String.format("Nome funcionário %s", f.getNome()));
    }
}

7

If using Java 8 you can iterate as follows:

public void imprimir(Set<? extends FuncionarioAbstract> funcionarios) {
  funcionarios.forEach(this::imprimir);
}

And implement the method that prints individually:

private void imprimir(Funcionario funcionario) {
  NumberFormat formato = NumberFormat.getCurrencyInstance();

  System.out.println(funcionario.getNome() + " " + formato.format(funcionario.getSalario()));
}

5

You can override the method toString() class FuncionarioAbstract. Take an example in this other answer of mine. Would look like this:

@Override
public String toString() {
    return getNome() + " - R$ " + getSalario();
}

Hence to make the method to print, it is very easy:

public static void imprimir(Set<? extends FuncionarioAbstract> funcionarios) {
    for (FuncionarioAbstract func : funcionarios) {
        System.out.println(func);
    }
}

You just need to overwrite the method getSalario(). It is an abstract method in FuncionarioAbstract. The class Gerente implements it one way and the class Administrador implements it from another.

2

Rewriting the toString of the Funcioabstract class, just pass this lambda expression.

fa.forEach(n-> System.out.println(n));

Browser other questions tagged

You are not signed in. Login or sign up in order to post.