public abstract class Registro {
...

    /**
     * Método abstrato, ou seja, apenas a assinatura do método.
     */
    abstract String lsR();

}

public class Diretorio extends Registro {

...

    /**
     * Implementação do método abstrato ls da classe Registro que retorna o nome
     * do Diretorio e chama o método listar do seu atributo registros que é do
     * tipo RepositorioRegistros (lista de Registros).
     */
    public String lsR() {
        return super.getNome() + "\n" + registros.listarR();
    }

}

public class Arquivo extends Registro {
...

    /**
     * Implementação do método abstrato ls da classe Registro que retorna o nome
     * do Arquivo.
     */
    public String lsR() {
        return super.getNome();
    }
}


public class RepositorioRegistros {

...
    /**
     * Chama o método ls do atributo registro (Registro) e o método listar do
     * atributo proximo (RepositorioRegistros).
     */
    public String listarR() {

        String retorno = "";

        if (registro != null){
            retorno = registro.lsR() + "\n" + proximo.listarR();
        }
        return retorno;
    }

}