Qual è la differenza tra un metodo astratto e un'interfaccia [duplicato]

0
  1. Un'interfaccia richiede l'implementazione delle funzioni specificate in una classe che implementa l'interfaccia.

  2. Una funzione astratta di una classe astratta richiede l'implementazione in una classe che estende la classe astratta.

Sono essenzialmente le stesse cose e non vedo davvero la differenza. Ho dato un'occhiata a domande simili e le risposte non hanno ancora molto senso.

Qualcuno può spiegare tutte le differenze in modo approfondito ed esempi pratici di quando lo useresti?

    
posta dspacejs 27.05.2015 - 14:09
fonte

2 risposte

2

Un metodo astratto è un metodo. Una classe astratta può contenere diversi metodi, e quindi anche un'interfaccia. La differenza tra questi due è che una classe astratta può avere implementazioni per alcuni dei suoi metodi, mentre un'interfaccia non ha nessuna implementazione.

(Solitamente Java ora consente implementazioni predefinite anche nelle interfacce, ma cerca di non lasciarti confondere. Java è un caso particolare, in cui la principale differenza tra le interfacce e le classi astratte è che puoi ereditare solo una volta, ma può implementare qualsiasi numero di volte. Altre lingue con ereditarietà multiple non hanno questa limitazione.)

    
risposta data 27.05.2015 - 14:15
fonte
4

TL; DR: L'interfaccia è una descrizione, la classe astratta è un'implementazione (non completata); con tutte le conseguenze.

Come già detto, dovremmo confrontare cose comparabili, quindi una classe astratta (con tutti i metodi astratti) rispetto all'interfaccia.

Una classe astratta è una classe reale (sebbene non istantanea, ma utilizzabile come superclasse). Quindi è già materializzato (astratto) lo scheletro dell'attuazione. Un'implementazione con buchi da riempire, per così dire.

Interface, d'altra parte, è solo una descrizione di un contratto. La differenza è che le interfacce sono molto più flessibili con cui lavorare. Un tipico esempio apparirà immediatamente in qualsiasi linguaggio con una sola ereditarietà: la tua classe di implementazione può essere conforme a molte interfacce contemporaneamente, ma puoi ereditare solo da una classe, non da molte (non importa se sono astratte o meno).

    
risposta data 27.05.2015 - 14:28
fonte

Leggi altre domande sui tag