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?

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top