A palavra-chave final impede que você atribua um novo valor ao parâmetro. Eu gostaria de explicar isso com um exemplo simples
Suponha que temos um método
Método 1(){
Data dateOfBirth = nova data ("01/01/2009");
método2 (dateOfBirth);
método3 (dateOfBirth); }
public mehod2 (data dateOfBirth) {
....
....
....
}
public mehod2 (data dateOfBirth) {
....
....
....
}
No caso acima, se "dateOfBirth" receber um novo valor no método2, isso resultaria em uma saída errada do método3. Como o valor que está sendo passado para o método3 não é o que era antes de ser passado para o método2. Portanto, para evitar esta palavra-chave final é usada para parâmetros.
E esta também é uma das melhores práticas de codificação Java.