Você não estranharia um código assim, estranharia?
String cargo = funcionario.getCargo().getNome();
O que esse código faz? A classe Funcionario retorna um objeto da classe Cargo. Em seguida, você chama um método da classe Cargo, que é o getNome, que retorna a String do nome. Por isso, vc poderia até continuar:
String sigla = funcionario.getCargo().getNome().substring(0,3).toUpperCase();
Agora, a classe Funcionario retorna um objeto da classe Cargo. Em seguida, você chama um método da classe Cargo, que é o getNome, que retorna a String do nome. Em seguida, chama o subString da classe String que retorna outra string só com as três primeiras letras do nome. E, por último, chama o toUpperCase() que retorna uma última String, com o nome em letra maiúscula, e essa é atribuída a variável sigla.
A idéia dessa técnica com o this é a mesma. A técnica chama-se invocation chaining. Porém, ao invés de retornar um objeto diferente (como fizemos com o Cargo) retornamos o próprio objeto que sofreu a ação do método (this). Assim, poderemos chamar outro método dele. Um exemplo disso é a classe StringBuilder:
StringBuilder x = new StringBuilder().append("Olá ").append("mundo");
O que estamos fazendo aqui?
a) O java cria um new StringBuilder();
b) Chama-se o método append("Olá "). Ele cocatena o StringBuilder e retorna a si mesmo;
c) Agora, chama-se o método .append(“Mundo”). Ele concatena mundo ao StringBuilder e retorna a si mesmo.
d) Esse último retorno é guardado na variável x.
Como isso gera uma sintaxe bastante legível, criaram-se técnicas baseadas nesse padrão. Costumaram a chamar isso de Fluent Interfaces e são comumente usadas com o padrão Builder. Outro exemplo de classe que usa essa técnica no Java é a classe ByteBuffer. E não gosto do fato das collections não fazerem isso também. Seria ótimo fazer:
List<String> nomes = new ArrayList<>().add("Vinícius").add("Godoy");