Scusate, è corretto il valore "no" nella tabella di confronto interfacce / classi astratte alle entrate "dichiarazioni metodi" e
"interfacce"?
https://www.html.it/pag/51820/classi-astratte-in-java/
Scusate, è corretto il valore "no" nella tabella di confronto interfacce / classi astratte alle entrate "dichiarazioni metodi" e
"interfacce"?
https://www.html.it/pag/51820/classi-astratte-in-java/
Per fare un tavolo ci vuole un fiore.
Precisiamo una cosa: una invocazione di metodo è "virtuale" quando la scelta della implementazione del metodo da eseguire è fatta a runtime sulla base dell'oggetto realmente istanziato.
In Java tutti i metodi sono "virtuali", tranne i metodi static e quelli non-static che sono private o final (perché il compilatore "sa" già quale è la implementazione da invocare).
Sotto questa luce, quindi pure i metodi di interfaccia sono "virtuali" (dimentichiamo un attimo queli default di Java 8), perché comunque si basano sul fatto che ci dovrà pur essere un oggetto che implementa il metodo della interfaccia. E quindi è comunque un dispatch "dinamico".
Per dettagli più fini, dovrei leggere bene il JLS.
Quindi, a parte i metodi di classe, final e private, sono di default tutti virtual perché solo a run time verrà effettuata la assegnazione della corretta implementazione corrispondente. Pertanto la tabella che ho richiamato è errata: le interfacce possono dichiarare metodi virtuali, anzi sarà esclusivamente tale ogni metodo di interfaccia, visto che i qualificatori private e final sono preclusi e anche default sembra virtual.
Per fare un tavolo ci vuole un fiore.