Doubt about exercise with abstract class in Java

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 String name attribute and the 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 an attribute with double comissao and his salary is 2500 + comissao .

     

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

I have already done the 3 classes and I am finishing the main one, I will post the code here and would like to know if it is 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 is would be how to use this Set employees to print the name and salary of employees.

    
asked by anonymous 17.11.2016 / 14:58

4 answers

8

Only you iterate 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()));
    }
}
    
17.11.2016 / 15:01
7

If you are 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()));
}
    
17.11.2016 / 15:11
5

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

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

From there to make the method to print, it is quite easy:

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

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

    
17.11.2016 / 15:31
2

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

fa.forEach(n-> System.out.println(n));
    
17.11.2016 / 16:45