Aggiornamento: la risposta originale di seguito è stata scritta senza comprendere appieno la domanda e pertanto non affronta direttamente la domanda. :)
Tuttavia, deve essere informativo per coloro che desiderano comprendere l'uso generale della final
parola chiave.
Per quanto riguarda la domanda, vorrei citare il mio commento dal basso.
Credo che non sei costretto ad attuare la finalità di un argomento per lasciarti libero di decidere se dovrebbe essere definitivo o meno nella tua implementazione.
Ma sì, sembra piuttosto strano che tu possa dichiararlo final
nell'interfaccia, ma averlo non definitivo nell'implementazione. Avrebbe avuto più senso se uno dei due:
un. final
parola chiave non consentita per gli argomenti del metodo di interfaccia (astratto) (ma è possibile utilizzarlo nell'implementazione) oppure
b. dichiarare un argomento come final
nell'interfaccia lo costringerebbe ad essere dichiarato final
in attuazione (ma non forzato per le non finali).
Posso pensare a due motivi per cui una firma del metodo può avere final
parametri: Beans and Objects ( In realtà, sono entrambi la stessa ragione, ma contesti leggermente diversi ) .
Oggetti:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
// ^--- OUTPUT IS: Water Carrot Broccoli Chicken ChickenBroth
// We forgot to add cauliflower. It went into the wrong pot.
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
// ^--- Assignment allowed...
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
//cookingPot = new StringBuilder(cookingPot.toString());
// ^---- COMPILATION ERROR! It is final.
cookingPot.append("ChickenBroth ");
}
La final
parola chiave ha assicurato che non avremmo creato accidentalmente una nuova pentola locale mostrando un errore di compilazione quando abbiamo tentato di farlo. Ciò ha assicurato che il brodo di pollo fosse aggiunto alla nostra pentola originale addChicken
ottenuta con il metodo. Paragonalo a quello in addVegetables
cui abbiamo perso il cavolfiore perché lo ha aggiunto a una nuova pentola locale invece della pentola originale che ha ottenuto.
Fagioli:
è lo stesso concetto degli oggetti (come mostrato sopra) . I fagioli sono essenzialmente Object
di Java. Tuttavia, i bean (JavaBeans) vengono utilizzati in varie applicazioni come modo conveniente per archiviare e trasferire una raccolta definita di dati correlati. Proprio come addVegetables
potrebbe rovinare il processo di cottura creando una nuova pentola StringBuilder
e gettandola via con il cavolfiore, potrebbe anche fare lo stesso con una pentola JavaBean .
final
comunque non fa nulla con i tipi nativi, poiché sono copiati.