Vamos criar um programa Java para ordenar vários tipos de objeto diferente, utilizando o algoritmo de Bubble Sort.
Para isto vamos utilizar uma interface chamada Comparavel. Esta interface irá possuir a assinatura de método que todas as classes que desejam ser comparadas precisa implementar:
Vamos criar uma classe que ordena um array de objetos que são do tipo Comparavel:
Como todos os objetos que são comparáveis implementam a interface Comparavel, então criamos o método ordenar, que recebe um vetor de objetos do tipo Comparavel, e como uma classe implementa os métodos da interface, sabemos que todas as classes comparáveis terão o método comparar, por isso podemos ordenar os objetos usando o método objeto[i].comparar(objeto[j]).
Agora, vamos criar uma classe que implemente a interface Comparavel. Quando uma classe implementa uma interface, esta classe, obrigatoriamente, precisa implementar todos os métodos declarados na interface. Apenas quando usamos classes abstratas implementando interface é que não precisamos, obrigatoriamente, implementar todos os métodos.
A classe livro implementou o método comparar para fazer a comparação de acordo com o autor e título do livro.
Agora, vamos criar uma classe para testar a ordenação de um vetor de Livros.
Quando chamamos o.ordenar(livros), estamos passando o vetor de objetos livros para ser ordenado. Como Livro implementa Comparavel podemos passar um objeto do tipo Livro em que é esperado um objeto do tipo Comparavel. O método ordenar() irá chamar o método comparar() que foi implementado pela classe Livro, isto é feito em tempo de execução da aplicação, a JVM verifica qual o tipo da classe do objeto e chama o método que foi implementado nele, isto é chamado de Polimorfismo.
Quando testamos esta classe, temos a seguinte saída:
Crie uma classe Animal que possui os atributos especie e raca, faça está classe implementar a interface Comparavel, e implemente o método comparar de forma que compare por especie e raca.