In Java, quando devo usare un metodo astratto in un'interfaccia?
-
18-09-2019 - |
Domanda
Ho la seguente interfaccia in Java
public interface IFoo
{
public abstract void foo();
public void bar();
}
Qual è la differenza tra foo () e bar ()? Quando devo utilizzare astratto?
Entrambi sembrano realizzare quello che voglio a meno che non mi manca qualcosa di sottile?
Aggiorna Duplica di perché uno dichiarare un metodo di interfaccia Java come astratta?
Soluzione
Non c'è alcuna differenza funzionale. Nessun implementazione è sempre fornita in un'interfaccia Java in modo da tutte le dichiarazioni di metodo sono implicitamente astratti.
Vedi [1]: http: //java.sun .com / docs / libri / tutorial / java / IandI / abstract.html
formare una citazione diretta quanto sopra:
Nota: Tutti i metodi di un'interfaccia (vedere la sezione Interfaces) sono implicitamente astratti, quindi il modificatore astratta non è usata con metodi di interfaccia (che potrebbe essere, non è solo necessario)
.
Altri suggerimenti
I metodi di interfaccia sono entrambi public
e abstract
per impostazione predefinita. Non c'è alcuna differenza tra foo()
e bar()
e si può rimuovere in modo sicuro tutte le parole chiave public
e abstract
.
Non manca nulla. Dal Java Language Specification :
Ogni dichiarazione di metodo nel corpo di un'interfaccia è implicitamente astratto, per cui il suo corpo è sempre rappresentata da una virgola, non un blocco.
Ogni dichiarazione di metodo nel corpo di un'interfaccia è implicitamente pubblico.
In altre parole, è possibile omettere la public
così come la abstract
sui metodi di interfaccia.
E 'ridondante (non c'è alcuna differenza tra le due dichiarazioni) ed esplicitamente scoraggiato in sezione 9.4 della specifica Java Language:
Per la compatibilità con le versioni precedenti della piattaforma Java, è consentito ma scoraggiato, come una questione di stile, per specificare ridondante l'abstract modificatore per i metodi dichiarati in interfacce.
E public
è altrettanto inutile e scoraggiato:
E 'consentito, ma fortemente sconsigliato per una questione di stile, per specificare il modo ridondante modificatore di pubblico per i metodi di interfaccia.
Non so perché public
è con forza scoraggiato ma abstract
è solo scoraggiato ...
Sia eseguire la stessa, dal momento che tutti i metodi di un'interfaccia sono astratti.
abstract
in questo scenario non è necessaria (come sta segnando metodi di interfacce come public
).
Si potrebbe al posto usare questo su un metodo in una classe astratta per far valere la sua preponderante da una sottoclasse.
Non ci sono alcuna differenza tra le dichiarazioni. Concettualmente, tutti i metodi di un'interfaccia sono astratti.
Non fa alcuna differenza. Tutti i metodi di un'interfaccia Java sono sempre astratti.
Si veda la prima nota a questo link: http://java.sun.com/docs/books/ tutorial / java / IandI / abstract.html
Sia foo () e bar () sono astratti come sono dichiarate all'interno di un'interfaccia. La parola astratta che hai usato qui non ha alcun significato -. Si rimuove meglio
Le interfacce in Java sono uguali "in qualche modo" per una classe completamente astratte, in modo da aggiungere la parola chiave "astratto" per una dichiarazione di metodo in un'interfaccia non ha nulla a che fare con il metodo!