Interfaces

Herança de classe versus herança de interface

"Program to an interface, not an implementation"

Exemplo no uso de interfaces

interface SelecionávelPorNome {
    Iterator getIteradorPorNome(String nome);
}

interface Nomeável {
    String getNome();
}

classe ColeçãoDeAlunos implements SelecionávelPorNome {
    // ...
    Iterator getIteradorPorNome(String nome) {
        // ...
    }
}

classe Aluno implements Nomeável {
    // ...
    String getNome() { ... }
}

classe ColeçãoDeProfessores implements SelecionávelPorNome {
    // ...
    Iterator getIteradorPorNome(String nome) {
        // ...
    }
}

classe Professor implements Nomeável {
    // ...
    String getNome() { ... }
}

classe ColeçãoDeDisciplinas implements SelecionávelPorNome {
    // ...
    Iterator getIteradorPorNome(String nome) {
        // ...
    }
}

classe Disciplina implements Nomeável {
    // ...
    String getNome() { ... }
}

classe ComponenteDeSeleção {
    Iterator it;
    // observe o tipo do parâmetro (uma interface)
    public ComponenteDeSeleção(SelecionávelPorNome coleção, String nome) {
        it = coleção.getIteradorPorNome(nome); // chamada polimórfica
    }
    // ...
    void geraListBox() {
        response.out.println("<select name=\"nome\" size=\"1\">");
        while(it.hasNext()) {
                int i = 1;
                // observe o tipo do objeto
                Nomeável obj = (Nomeável)it.next();
                response.out.println("<option value=\"escolha" + i + "\">" +
                                      obj.getNome() + // chamada polimórfica
                                      "</option>");
        }
        response.out.println("</select>");
    }
}

    // Como usar o código acima num servlet:
    // supõe que as coleções usam o padrão Singleton
    ComponenteDeSeleção cds =
        new ComponenteDeSeleção(ColeçãoDeAlunos.getInstance(), "João");
    cds.geraListBox();

    cds = new ComponenteDeSeleção(ColeçãoDeDisciplinas.getInstance(), "Programação");
    cds.geraListBox();

Como achar interfaces

proj2-2 programa próxima