In una classe Java è possibile definire un metodo final
per indicare che questo metodo non può essere ignorato:
public class Thingy {
public Thingy() { ... }
public int operationA() {...}
/** this method does @return That and is final. */
public final int getThat() { ...}
}
È chiaro e può essere utile proteggere da sostituzioni accidentali o forse dalle prestazioni, ma non è questa la mia domanda.
La mia domanda è: da un punto di vista OOP ho capito che, definendo un metodo, final
il progettista di classe promette che questo metodo funzionerà sempre come descritto o implicito. Ma spesso questo può essere al di fuori dell'influenza dell'autore della classe, se ciò che il metodo sta facendo è più complicato della consegna di una proprietà .
Il vincolo sintattico mi è chiaro, ma qual è l'implicazione in senso OOP? È final
usato correttamente in questo senso dalla maggior parte degli autori di classe?
Che tipo di "contratto" final
promette un metodo?