Uso de Intefaces

4 respostas
Marques

Colegas,

Tentando entender a utilidade das interfaces deparei-me com esse exemplo:
As minhas dúvidas estão nas linhas de comentários abaixo

Muito obrigado,

José Marques

interface Leitor {
        String lendo();
    }

    interface Programador {
        void pensando(char[] ideias);
        String digitando();
    }

    class ParticipanteForum implements Leitor, Programador {
        String pensamento;
        public String lendo() {
            return "Forum";
        }
        public void  pensando(char[] ideias) { 
            pensamento = new String(ideias);
        }
        public String digitando() { 
            return pensamento;
        }
        private String aprendendo() { 
            return "Java";
        }
    }

    public class Demonstracao {
        public static void main(String[] args) {
            ParticipanteForum participante = new ParticipanteForum ();
            Leitor leitor = participante; 
            System.out.println("O participante está lendo " + leitor.lendo());

            // Qual a vantagem da linha acima em relação a  System.out.println("O participante está lendo " + paticipante.lendo()); ???
           // Qual a vantagem em se utilizar interaces?

            Programador programador = participante;
            String java = "Java";
            programador.pensando(java.toCharArray());
            System.out.println ("E programando " + programador.digitando());
        }
    }

4 Respostas

sergiotaborda

Marques:
Colegas,

Tentando entender a utilidade das interfaces deparei-me com esse exemplo:
As minhas dúvidas estão nas linhas de comentários abaixo

A vantagem não é nenhuma nesse codigo.
Esse código só lhe mostra que como ParticipanteForum implementa Leitor então vc pode jogar o mesmo objeto
em variáveis dos dois tipos.

A vantagem existe quando vc controi codigo polimorfico. Ou seja, codigo que não se preocupa com quem o objeto realmente ele é mas apenas que ele seja de um certo tipo. Por exemplo, vc cria um codigo que faz dado uma string ele faz um substring dentre o 2 e penultimo caracter.

public String trim(String str){

    return str.substring(2,str.length()-2);
}

Só que no seu codigo vc montou um objeto StringBuilder e quer aplicar aquela logica ao StringBuilder.
Mas StringBuilder não é uma String. Mas ambos implementam a interface CharSequence.
então é só mudar para

public CharSequence trim(CharSequence str){

    return str.subSequence(2,str.length()-2);
}

Agora o método fucniona para String, StringBuffer , StringBuilder e qualquer coisa que implemente CharSequence.

Outros exemplos de interfaces uteis são Set, List e Map

Paulo_Silveira

Ola Jose

Achei esse exemplo abstrato demais: nao da pra perceber a real vantagem da interface, que é o contrato gerando polimorfismo.

Tem um legal na apostila da caelum, no capitulo de interfaces:
http://guj.com.br/posts/list/84721.java

abracos

ViniGodoy

Dá uma lida também nessa thread:
http://www.guj.com.br/posts/list/51866.java#273117

Marques

Agora sim!

Muito obrigado pelas repostas!!!

Criado 13 de março de 2008
Ultima resposta 13 de mar. de 2008
Respostas 4
Participantes 4