Dúvida sobre Reutilização de Código

Olá!
Tenho a seguinte questão uma questão sobre reutiização de código.

Criei uma classe chamada Hierarquia:

[code]public class Hierarquia {

private int idHierarquia;
private String nomeHierarquia;
private String descHierarquia;

public Hierarquia() {
}

//Getters e Setters...[/code]

Depois, criei uma classe CadastroHierarquia, que faz o um acesso no banco, monta uma um ArrayList de Hierarquias, e também possui métodos para pegar o próximo item e o anterior:

[code]public class CadastroHierarquia {

Hierarquia hie = new Hierarquia();
Acesso a = new Acesso();
ArrayList <Hierarquia> listHie = new ArrayList<Hierarquia>();
ListIterator <Hierarquia> i;

public Hierarquia pesquisaHierarquia(Hierarquia pesqHie) {
    listHie.clear();
    listHie = a.select(pesqHie);
    i = listHie.listIterator();
    hie = i.next();
    return hie;
}

public Hierarquia proximo(){
    if (i.hasNext()){
        hie = i.next();
        return hie;           
    } else {
        return null;
    }
}

public Hierarquia anterior(){
    if (i.hasPrevious()){
        return i.previous();
       
    } else {
        return null;
    }
}

}[/code]

O que eu queria saber é se tem como eu reaproveitar essas rotinas da classe CadastroHierarquia para outras classes. Por exemplo, eu crio uma classe Funcionário, que precisa das mesmas rotinas de manipulação de ArrayList que a classe Hierarquia. Eu teria que criar uma nova classe, ou teria algum jeito de reimplementá-la?
Pensei em usar herança ou interface, mas não consegui chegar a nehuma conclusão.

Obrigado!!!
:wink:

como está essa classe você não vai conseguir reaproveitar

Mas para essa rotina de manipulação de lista, tem alguma maneira de torná-la reutilizável?

Simples! Da mesma maneira que ArrayList é uma classe genérica, você também pode criar a sua classe genérica:

public class Cadastro<T>{
   Acesso a = new Acesso();
   ArrayList<T> list = new ArrayList<T>;
   ListIterator<T> i;

   public T pesquisa( T pesq ){ 
      //....
   }

   public T proximo(){
      //...
   }

   //e por aí vai ...
}