Em uma classe Java, um método pode ser definido para ser final, para marcar que esse método não pode ser substituído:
public class Thingy {
public Thingy() { ... }
public int operationA() {...}
/** this method does @return That and is final. */
public final int getThat() { ...}
}
Isso é claro e pode ser útil para proteger contra a substituição acidental ou talvez o desempenho - mas essa não é a minha pergunta.
Minha pergunta é: Do ponto de vista do POO, entendi que, ao definir um método, finalo designer da classe promete que esse método sempre funcionará como descrito ou implícito. Mas muitas vezes isso pode estar fora da influência do autor da classe, se o que o método está fazendo é mais complicado do que apenas entregar uma propriedade .
A restrição sintática é clara para mim, mas qual é a implicação no sentido de POO? É finalusado corretamente nesse sentido pela maioria dos autores de classe?
Que tipo de "contrato" finalpromete um método?