Para exemplificação da utilização dos métodos, fiz com que a maioria deles retornassem uma String com um texto. A intenção é mostrar que os métodos devem realizar aquela determinada ação. Os únicos métodos que possuem retornos diferentes são da classe Aprendiz, que eu acrescento o nível da habilidade de um aprendiz ou adiciono uma habilidade.
Como dá para ver, usei e abusei de interfaces e classes abstratas a ponto de uma classe modelo herdar uma classe abstrata e implementar outras duas interfaces. Aprendi a usar HashMap no Java graças a esse desafio
Cada linha desse console é exibida pela chamada de cada método das classes.