classe Funcionario:
public abstract class Funcionario {
// método que informa a comissao.
public abstract double comissao();
}
classe Garcons:
public class Garcon extends Funcionario {
// atributos
private String nome;
private double [] mesas;
// construtor
public Garcon( String nome, double [] mesas) {
this.nome = "";
this.mesas = mesas;
}
// calcula a comissao
public double comissao() {
double total = 0;
for (int i = 0; i < mesas.length; i++) {
total = total + ( mesas[i] * 0.01);
}
return total;
}
}
classe Gerente:
import java.util.Iterator;
import java.util.LinkedList;
public class Gerente extends Funcionario {
// atributos
private String nome;
private LinkedList<Garcon> garcons;
// construtor
public Gerente( String nome, LinkedList<Garcon> garcons) {
this.nome = "";
this.garcons = garcons;
}
// calcula a comissao do gerente
public double comissao() {
// Iterator da API "java.util.Iterator". é um padrão de projeto.
Iterator<Garcon> i = garcons.iterator();
double total = 0;
while( i.hasNext() ) {
Garcon g = i.next();
total = total + ( g.comissao() * 3);
}
return total;
}
}
classe Restaurante (classe de teste):
import java.util.LinkedList;
public class Restaurante {
public static void main(String[] args) {
// lista que recebera os garcons.
LinkedList<Garcon> garcons = new LinkedList<Garcon>();
// instancia dois garcons.
Garcon a = new Garcon("CARLOS", new double[]{100, 100, 100});
Garcon b = new Garcon("FELIPE", new double[]{850, 350, 650});
//adiciona garcons a lista.
garcons.add(a);
garcons.add(b);
// instacia o gerente
Gerente chefe = new Gerente( "PAULO", garcons );
System.out.println( "comissao do gerente: R$ " + chefe.comissao());
}
}