Java LanguageMetodi predefiniti


introduzione

Il metodo predefinito introdotto in Java 8 consente agli sviluppatori di aggiungere nuovi metodi a un'interfaccia senza rompere le implementazioni esistenti di questa interfaccia. Fornisce flessibilità per consentire all'interfaccia di definire un'implementazione che verrà utilizzata come impostazione predefinita quando una classe che implementa tale interfaccia non riesce a fornire un'implementazione di tale metodo.

Sintassi

  • public default void methodName () {/ * metodo body * /}

Osservazioni

Metodi predefiniti

  • Può essere utilizzato all'interno di un'interfaccia per introdurre un comportamento senza forzare le sottoclassi esistenti per implementarlo.
  • Può essere sovrascritto da sottoclassi o da una sotto-interfaccia.
  • Non è consentito sovrascrivere i metodi nella classe java.lang.Object.
  • Se una classe implementa più di un'interfaccia, eredita metodi predefiniti con firme di metodo identiche da ciascuno degli intefacenti, quindi deve eseguire l'override e fornire la propria interfaccia come se non fossero metodi predefiniti (come parte della risoluzione dell'ereditarietà multipla).
  • Sebbene siano intesi a introdurre un comportamento senza rompere le implementazioni esistenti, le sottoclassi esistenti con un metodo statico con la stessa firma del metodo del metodo predefinito introdotto di recente verranno comunque interrotte. Tuttavia questo è vero anche in caso di introduzione di un metodo di istanza in una superclasse.



Metodi statici

  • Può essere utilizzato all'interno di un'interfaccia, destinata principalmente a essere utilizzata come metodo di utilità per i metodi predefiniti.
  • Non può essere sovrascritto da sottoclassi o da una sotto-interfaccia (è nascosta a loro). Tuttavia, come nel caso dei metodi statici, anche ora ogni classe o interfaccia può avere il suo.
  • Non è consentito sovrascrivere i metodi di istanza nella classe java.lang.Object (come nel caso attuale delle sottoclassi).



Di seguito una tabella che riassume l'interazione tra sottoclasse e super-classe.

- SUPER_CLASS-GRADO-METODO SUPER_CLASS-STATIC-METODO
SUB_CLASS-GRADO-METODO le sostituzioni genera-compiletime-errore
SUB_CLASS-STATIC-METODO genera-compiletime-errore nasconde



Di seguito è riportata una tabella che riassume l'interazione tra interfaccia e classe di implementazione.

- INTERFACCIA-default-METODO INTERFACCIA-STATIC-METODO
IMPL_CLASS-GRADO-METODO le sostituzioni nasconde
IMPL_CLASS-STATIC-METODO genera-compiletime-errore nasconde

Riferimenti :

  • http://www.journaldev.com/2752/java-8-interface-changes-static-method-default-method
  • https://docs.oracle.com/javase/tutorial/java/IandI/override.html

Metodi predefiniti Esempi correlati