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 garcons; // construtor public Gerente( String nome, LinkedList 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 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 garcons = new LinkedList(); // 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()); } }